【发布时间】:2015-11-26 23:42:08
【问题描述】:
我正在使用 C malloc 和免费工具,我遇到了奇怪的内存泄漏。有人知道吗?
目标是成功释放一个字符**。
所以在函数 freezer 中,我释放了 char** 中的每个 char* 并释放了 char**。
但是 Valgrind(我在 linux 上的泄漏检测器)发现泄漏的 4 个块中有 20 个字节(我不知道我是否可以写“泄漏”XD) 更有趣的部分是,如果我通过在其中添加一个 char* 来做一个更大的 char**,它会在另一个块中泄漏 5 个更多字节的内存:/。
#include <stdio.h>
#include <stdlib.h>
void freezer(char ***array, int length){
int i;
i = -1;
while (*array[++i] != NULL){
free(*array[i]);
}
free(*array);
}
int main(){
char **big;
int len = 4;
int i;
big = malloc(sizeof(char *) * (len + 1));
i = -1;
while (++i < len){
big[i] = malloc(sizeof(char) * 5);
big[i][0] = 't';
big[i][1] = 'e';
big[i][2] = 's';
big[i][3] = 't';
big[i][4] = '\0';
}
big[i] = NULL;
i = -1;
while (++i < len){
printf("i: %d\t%s\n", i, big[i]);
}
freezer(&big, len);
return (0);
}
您可以直接复制/粘贴/运行代码。
所以如果您对错误/C 问题有任何线索,请告诉我。
【问题讨论】:
-
请不要将答案编辑到问题中,这会让未来的读者感到奇怪。 (虽然编辑实际上是不正确的,
*array[++i]应该是(*array)[++i],下一行也是如此)
标签: c memory memory-management memory-leaks