我在动态内存分配方面遇到了一些麻烦.
下面只是一个测试代码,我一直在尝试解决问题(这是我当前项目代码中的相同问题,这只是一种更简单的方式来展示它).
#include<stdlib.h> #include<stdio.h> #include<assert.h> int main(){ int x = 5; int *ptr = (int*) malloc(sizeof(int)); assert(ptr != NULL); ptr = &x; printf("x = %d\n",x); *ptr = 3; printf("x = %d\n",x); free(ptr); return 0; }
程序编译很好,运行时我得到正确的输出打印“x = 5 x = 3”
但后来我得到了错误:
glibc detected ./dnam: free(): invalid pointer: 0xbfccf698
dnam是测试程序的名称.
从我读到的关于错误的内容来看,它应该是由释放内存导致的,你没有malloc / calloc / realloc’d.
此错误消息后跟回溯和内存映射.在内存映射结束时,我被告知程序已中止(核心转储).
解决方法
int *ptr = (int*) malloc(sizeof(int)); ptr = &x;
你正在改变ptr值!如果您尝试释放它,编译器将进行无限复仇.
这里:
free(ptr);
您正在释放未通过malloc分配的对象.