【发布时间】:2011-06-11 15:26:58
【问题描述】:
我有一个函数,它接受一个指向 char ** 的指针并用字符串填充它(我猜是一个字符串数组)。 *list_of_strings* 在函数内部分配内存。
char * *list_of_strings = NULL;
/* list_of_strings malloc'd inside function */
fill_strings_with_stuff(&list_of strings);
use_list_for_something(list_of_strings);
/* Now how do I free it all? */
在我使用了字符串之后,我将如何释放内存?如果我打电话
free(list_of_strings);
这不是释放实际的指针而不是每个字符串本身使用的内存吗?如何完全释放内存
为了清楚起见,函数看起来像这样:
fill_strings_with_stuff(char *** list)
{
*list = malloc(AMOUNT);
for (i = 0; i < SOMETHING; i++) {
*(list + i) = malloc(LINE_LEN);
*(list + i) = some_string_from_somewhere
}
/* ... */
}
【问题讨论】:
-
你有内存泄漏:
*(list + i) = some_string_from_somewhere覆盖了从 malloc 获得的指针。 -
这是一个很好的观点。您应该使用类似 strcpy/strncpy/other 的替代方法来复制字符串。我个人建议使用类似 snprintf 的东西,如果没有其他原因,它会迫使你评估你的假设。