【发布时间】:2013-11-10 01:23:57
【问题描述】:
问题是在这个例子中如何正确分配/释放内存:
void test(char*** array, int* count) {
*array = malloc(sizeof(char*) * MAX_ARRAY);
while (...) {
(*array)[i] = (char*)malloc(strlen(fooString));
}
}
函数调用:
char** array;
int count;
test(&array, &count);
// now free the memory - i think i have to?
for(i = 0; i < count; i++) {
free(array[i]); // <-- crash here
}
free(array);
看起来 array[0] 在测试函数内部的地址与外部不同。怎么会这样?看来我理解错了,因为数组的地址在函数内外是一样的。
编辑:问题是我无法释放分配的内存(参见代码中的“crash here”)。为什么?它将如何运作?
【问题讨论】:
-
不适用于你的问题,但不要强制转换 malloc() 的返回值
-
测试中的array[0] 与测试之外的array[0] 不同。在 test 中,array 保存了函数调用 test 中名为 array 的变量的地址。还有do not cast the return value of malloc
-
我认识到这是两个不同的数组[0](仍然不明白为什么),但是我如何才能释放分配的内存?
-
另注:
strlen不包含 '\0' 字符。 -
这是什么
while (...)?
标签: c arrays function memory pass-by-reference