C - 释放指针数组是否也释放它们指向的内容?
问题描述:
说我有一个指针数组包含字符串每所以对于这样的结构:C - 释放指针数组是否也释放它们指向的内容?
printf("%s\n", array[0]);
输出是:
Hello.
如果我执行free(array)
将这种自由是什么array[0]
是指向? ("Hello."
)。
我花了几个小时试图手动释放每个元素,我得到的所有是崩溃。我希望这是一个快捷方式:/
答
这一切都取决于如何分配数组。我给的例子:
实施例1:
char array[10];
free(array); // nope!
实施例2:
char *array;
array= malloc(10); // request heap for memory
free(array); // return to Heap when no longer needed
实施例3:
char **array;
array= malloc(10*sizeof(char *));
for (int i=0; i<10; i++) {
array[i]= malloc(10);
}
free(array); // nope. You should do:
for (int i=0; i<10; i++) {
free(array[i]);
}
free(array);
广告。示例1:数组在堆栈上分配(“自动变量”),不能通过free
发布。
Ad。示例2:使用malloc
从堆请求存储。不再需要时,使用free
将其返回堆。
Ad。例3:你声明了一个指向字符的指针数组。首先为阵列分配存储空间,然后为每个数组元素分配存储空间以放置字符串。不再需要时,必须首先释放字符串(使用free
),然后释放阵列本身(使用free
)。
答
如果我执行一个免费的(数组)将这个免费什么array [0]指向 ? (“你好。”)。
不,他们不会自动释放,但取决于您如何分配每个人,可能没有必要实际释放它们。如果指向由malloc
和类似分配函数返回的内存,则只需要释放它们即可。
假设你有一个指针数组,字符串array
char * array[2];
array[0] = "Some text"; // You would not need to free this
array[1] = malloc(LENGTH); // This one you would have to free
注意在这种情况下,你不需要释放array
本身。只有索引为1的元素。
答
你只需要免费手动使用malloc()
。所以不行,根据指针它可能不会,甚至可能没有必要。
答案是否定的。你需要'释放'你的'malloc'。 –
'calloc'在崩溃中起作用吗?我没有使用'malloc',只有'calloc'。 – Laefica
至于你的崩溃,首先在调试器中运行以捕获它们,并尝试了解它们在代码中发生的位置,然后尝试找出它们发生的原因。如果你仍然无法弄清楚,那么回到这里并且询问一个关于它的(新的)问题(并且包括一个[最小,完整和可验证示例](http://stackoverflow.com/help/) mcve),其中包括指出发生崩溃的位置)。 –