【发布时间】:2013-07-29 06:28:44
【问题描述】:
我正在使用malloc分配内存:
main()
{
int *array;
int i;
for(i = 0; i<40; i++)
{
array = malloc(100 * sizeof(int));
}
free(array);
}
这应该分配15.625KB,但如果我在valgrind 中运行它,峰值内存是15.92KB。
它是怎么来的?
如何释放所有 40 个指针?
【问题讨论】:
-
可能是堆碎片
-
我认为分配了超过 400 个字节,即每个 malloc 调用应该分配 408 个字节。也许像 next/prev 指针这样的内部堆数据?
-
您的代码包含一个错误:您必须保留从 malloc 返回的每个指针并单独释放该指针。您只是释放最后一个指针。这会导致先前分配的 39 个指针导致内存泄漏。
-
如果您尝试调整当前分配的内存大小,您应该使用 realloc。 Malloc 将分配新的内存,正如 CouchDeveloper 所说,以前分配的内存在您当前的代码中不再可访问,因此永远不会被释放。
标签: c malloc dynamic-memory-allocation