【3-1-29】mallocfree实战

来源:互联网 发布:猪八戒局域网考试软件 编辑:程序博客网 时间:2024/05/20 05:08

我们了解了静态分配与动态分配的原理后,就要了解malloc和free两个函数

1:malloc函数//分配成功举例

//malloc,分配内存函数,它的返回值就是1个void指针类型,
//分配内存,释放内存
void main500()
{
//看它如何消耗内存
while (1)
{
//1024 * 1024 * 100 代表分配多少字节内存
//void *p 作用就是空类型的指针
void *p = malloc(1024 * 1024 * 100);//传递参数
Sleep(2000);
free(p);//传递一个指针,释放它,根据地址释放内存
Sleep(3000);


}

system("pause");
}

2:分配失败举例,就会返回一空指针

void main501()
{
void *p= malloc(Oxffffffff-100);//如何检测内存是否分配成功
if (p==NULL)//为空就是没有分配成功
{
printf("内存不够,没有分配");
}
system("pause");
}

3://malloc返回值是void类型,有时候需要类型转换,例如,我们要动态分配一数组怎么呢?free释放内存

void main502()
{//要把它转换成int *类型,为什么?因为作为一个指针而言,虽然他们都是地址,我知道int类型,就知道从这个地址前进4个字节
//看下面如何使用它
int *p= (int *)malloc(sizeof(int));//一个元素大小内存,这个内存用完了回收用free
*p = 5;
*p = -5;
//可以把它当作普通变量来使用
printf("我有%d元\n",*p);
free(p);
//free(p);内存不能反复释放
//可以访问这片内存,对这片内存进行赋值
//怎么样没有负数,unsigned 是无符号整数,不能有负数
unsigned int *p =(unsigned int *)malloc(sizeof(int));
*p = 5;
printf("我有%d元\n", *p);
//下面的不可以,内存根据地址来释放,下面错误
//unsigned int *p1 = p;
//free(p1);
system("pause");
}

4:实现一个动态数组 .按照数组的方式访问内存

void main503()
{
int num;
scanf_s("%d",&num);
int *p = malloc(sizeof(int)*num);
for (int i = 0; i < num;i++)//按照数组的方式访问内存
{
p[i] = i;
printf("\n%d,%x",p[i],&p[i]);
}
free(p);//释放内存
system("pause");
}

0 0