我在一些动态内存分配方面遇到了一些麻烦。
下面只是我一直在尝试解决问题的测试代码(这与我当前项目的代码中的问题相同,这只是一种更简单的显示方式)。
#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 的内存造成的。
此错误消息后跟回溯和内存映射。在内存映射的末尾,我被告知程序已中止(核心转储)。