free函数

仅有stack内的内存会被自动释放 故需要及时释放内存 否则内存空间会被浪费 存储已经没有利用价值的数据 内存会被消耗尽

free函数本质是将空间的内存给释放掉,也算是将空间的使用权给释放掉,释放后用户无法合法访问这段空间,释放掉后的空间存储的数据是随机值

悬空指针

free函数释放后 指针变量保存的malloc函数传回的首地址并未消失 如果继续使用指针变量保存的地址 则会出现越界

解决方案为将指针变量指向null

代码实践

#include <stdio.h>
#include <stdlib.h>

#define ORDER_SIZE 1

int main(void)
{
    char* malloc_pointer = NULL;
    malloc_pointer = (char*)malloc(ORDER_SIZE * sizeof(char));
    if (NULL != malloc_pointer)
    {
        printf("申请内存成功\n");
        free(malloc_pointer);
        printf("%s\n", malloc_pointer);
        system("pause");
    }
    else
    {
        printf("申请内存失败\n");
        system("pause");
    }
    return 0;
}

该段代码中 便产生了悬空指针malloc_pointer 解决方法 在free函数一行语句后 插入一行代码 malloc_pointer = NULL; 即可

输出结果

错误

正确

最后修改:2022 年 10 月 12 日
如果觉得我的文章对你有用,只需评论或转发支持,谢绝投喂!