创建动态内存空间函数malloc:
函数原型:
- void *malloc(size_t size);
需要头文件<stdlib.h>;
malloc函数向系统中申请分配size个字节的内存空间,并返回一个指向这块空间的指针。
返回值为void类型的原因:因为void是可以转换(赋值)为任意一种类型的,是由于我们申请内存空间的不确定性。
注意:申请的空间没有被初始化为零,所以所申请的空间内的数据是随机的。
如果函数调用成功,返回一个指向申请内存空间的指针,返回类型是void,所以可以被转换为任意类型的数据。
如果函数调用失败,返回值是NULL。如果设置size为0,也有可能返回为NULL,这不代表函数调用的失败。
调用malloc函数的例子:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *ptr; //定义指针ptr
ptr = (int *)malloc(sizeof(int)); //地址给ptr记载 (int *)可以省略
if (ptr == NULL)
{
printf("分配内存失败!\n");
exit(1); //程序退出
}
printf("请输入一个整数:");
scanf("%d",ptr);
printf("你输入的整数是:%d\n",*ptr);
return 0;
}
malloc申请的内存空间是位于堆,如果不主动释放堆上的资源,就会一直持续直到程序关闭,所以不再使用内存的时候,一定要自己动手来释放,否则会导致内存泄露。
释放动态内存空间函数free:
函数原型:
- void free(void *ptr);
此函数没有返回值,传入的参数是指向动态内存空间的指针。
free函数将释放ptr参数指向的内存空间。该内存空间必须是由malloc,calloc或realloc函数申请的。否则该函数将导致未定义行为。若ptr参数是NULL将不指向任何操作。
注意:free函数不会修改指针ptr的值,调用free后ptr仍然指向它原来指向的地方。地址所指向为非法空间。
free(ptr); //动态内存关闭
printf("你输入的整数是:%d\n",*ptr); //打印结果随机数值
内存泄漏:不合理的大量申请内存且没有被释放的行为。
1,隐式内存泄漏(用完内存块后没有及时使用free函数释放)
C语言为避免内存泄漏,注意malloc和free成对存在,确保手动释放资源。
2,丢失内存块的地址(指向所申请内存块的指针地址被更改,导致free所释放对象错误,free执行错误,且内存未被结束)
来源:CSDN
作者:izumiTiki
链接:https://blog.csdn.net/weixin_40468535/article/details/104397142