malloc后free出错 (释放了错误的地址空间)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tianxieeryang/article/details/85126906

malloc后free出错

问题

程序malloc后,free时 core dump
源程序如下(举例):

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

int main()
{
    int *buf;
    buf = (int *)malloc(sizeof(int));
    buf++;
    free(buf);
    return 0;
}

出错信息如下:
在这里插入图片描述

原因分析

指针 buf 的地址在 malloc 之后地址被改变,导致 free 时 free的不是以前的空间,因此出错。
上面举例很简单,意图也很明显,buf++ 就是为了说明 buff 地址被改变。
我们日常编程中遇到的问题肯定不会这么明显,但是程序中很可能就出现了类似的错误。比如在取地址时为了取到后面数据,对地址进行了改变。因此才会出现上述错误。
这种问题只需要 free 正确的地址就可。

解决方法

程序修改如下:

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

int main()
{
    int *buf;
    int *buf_src = NULL;
    buf = (int *)malloc(sizeof(int));
    buf_src = buf;
    buf++;
    free(buf_src);
    return 0;
}

增加一个指针变量 buf_src,用于保存原指针 buf 的地址,
现在 free(buf_src),既是对 malloc 时 指针 buf 地址空间的释放。

猜你喜欢

转载自blog.csdn.net/tianxieeryang/article/details/85126906