我在动态内存分配方面遇到了一些问题。
以下是我用来尝试解决问题的测试代码(这是我当前项目代码中的同一个问题,这只是一个更简单的演示方式)。
#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分配的内存所导致的。
这个错误消息后面跟着一个回溯和一个内存映射。在内存映射的末尾,我被告知程序已中止(core dumped)。
free
将尝试释放x
,而不是由malloc
分配的对象。你为什么要使用malloc
和free
,在这里你不需要它们。 - ouah