版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tianxieeryang/article/details/85126906
问题
程序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 地址空间的释放。