gpt4 book ai didi

c - 如何在以下代码中释放分配给 malloc 的内存?

转载 作者:太空宇宙 更新时间:2023-11-04 05:21:36 25 4
gpt4 key购买 nike

           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() 的地方或最后程序的?

最佳答案

免费。您必须首先释放 arr[i] 条目指向的内存,然后最后释放 arr(保存这些条目)指向的内存。你不能反过来做,因为释放内存意味着你可能不再使用该内存中的值。

因此:

for (i = 0; i < n; ++i) {
free(arr[i]);
}
free(arr);

关于c - 如何在以下代码中释放分配给 malloc 的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4330770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com