【发布时间】:2010-12-02 01:09:41
【问题描述】:
int n;
int **arr;
arr = (int**)malloc(n*sizeof(int));
for (i=0; i<n; ++i){
arr[i] = malloc(2*sizeof(int));
}
[编辑]
*** glibc detected *** ./abc: double free or corruption (out): 0x0000000002693370
======= Backtrace: =========
/lib/libc.so.6(+0x775b6)[0x7f42719465b6]
/lib/libc.so.6(cfree+0x73)[0x7f427194ce53]
./abc[0x405f01]
/lib/libc.so.6(__libc_start_main+0xfd)[0x7f42718edc4d]
./abc[0x400ee9]
======= Memory map: ========
00400000-00416000 r-xp 00000000 08:07 392882
00616000-00617000 r--p 00016000 08:07 392882
我尝试了以下提到的答案,但我得到了以下上述错误。这可能是什么原因?
[编辑]
上述问题现已解决。由于代码中存在错误。现在,我没有得到释放内存的任何改善。这可能是什么原因?
[编辑] 我正在使用一些模块来打印内存。以下是代码
memory_Print();
#ifdef CHECK
memory_PrintLeaks();
#endif
这里memory_PrintLeaks() 打印所需的内存和释放的内存。进行更改后我得到相同的值。
我想补充的一点是,我可以从程序的任何地方调用 free() 还是需要从某些特定位置调用,例如调用 malloc() 的位置或末尾程序?
【问题讨论】:
-
你有一个错误。第一个
malloc为pointers分配空间,而不是ints。函数调用应该是malloc(n*sizeof(int*)) -
是的,它现在工作了。但是为什么在这样做之后内存泄漏对我来说也是一样的呢?我释放的内存没有任何改善。
-
编辑您的代码以显示您如何
free内存。
标签: c memory-leaks