C语言内存管理基本函数
Posted honortech
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言内存管理基本函数相关的知识,希望对你有一定的参考价值。
目录
1. malloc
- 开辟成功则返回一个指向size个字节大小空间的指针,失败则返回NULL
- 注意检查返回值,(尤其VS2019及以上)
- 返回的指针为无类型指针,使用时注意类型转换
int* p = (int*)malloc(20);
2. free
-
参数为动态内存空间的地址
-
释放后需手动置空,否则会导致野指针问题
free(ptr);
ptr = NULL;
-
这里
ptr
指针中的地址并未被改,是其指向的内存空间被回收了 -
如果参数memblock为NULL,则会忽略指针,并立即返回
3. calloc
- 参数为元素个数和每个元素字节大小
- 会将开辟的空间的每个元素初始化为0
- 其它与
malloc
不无相同
4. realloc
- 参数为待调整内存空间的地址、调整后空间的字节数
- 可能的情况
- 原空间之后空间充足,直接追加空间至size大小
- 原空间之后空间不够,在堆区中另觅一块size大小的空间来使用,并将原有的数据拷贝至这块空间,返回此空间的地址
- 上述两种情况都不满足,即堆区中没有size大小的可用空间,返回NULL
因此使用realloc时注意检查返回值,并且将结果先存入一个中间变量
int* tmp = (int*)realloc(40);
if (tmp == NULL)
printf("realloc fail\\n");
exit(-1);
else
memblock = tmp;
5. 常见错误
-
对NULL指针解引用导致程序崩溃
(应注意检查开辟空间的返回值) -
动态开辟内存空间的越界访问
(判断空间使用率,需要时进行扩容) -
free释放内存空间的一部分
(不应改变内存空间起始位置的地址) -
对一块动态内存空间多次释放
(free后立即置空) -
对free后的原内存空间地址解引用操作,造成非法访问内存空间
(free后立即置空) -
忘记释放动态内存空间,造成内存泄漏
(及时主动释放)
以上是关于C语言内存管理基本函数的主要内容,如果未能解决你的问题,请参考以下文章