C - 释放指针数组是否也释放它们指向的内容?

问题描述:

说我有一个指针数组包含字符串每所以对于这样的结构:C - 释放指针数组是否也释放它们指向的内容?

printf("%s\n", array[0]); 

输出是:

Hello. 

如果我执行free(array)将这种自由是什么array[0]是指向? ("Hello.")。

我花了几个小时试图手动释放每个元素,我得到的所有是崩溃。我希望这是一个快捷方式:/

+7

答案是否定的。你需要'释放'你的'malloc'。 –

+0

'calloc'在崩溃中起作用吗?我没有使用'malloc',只有'calloc'。 – Laefica

+2

至于你的崩溃,首先在调试器中运行以捕获它们,并尝试了解它们在代码中发生的位置,然后尝试找出它们发生的原因。如果你仍然无法弄清楚,那么回到这里并且询问一个关于它的(新的)问题(并且包括一个[最小,完整和可验证示例](http://stackoverflow.com/help/) mcve),其中包括指出发生崩溃的位置)。 –

这一切都取决于如何分配数组。我给的例子:

实施例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的元素。

+0

在什么情况下我可以跳过释放它们? – Laefica

+0

@Laefica Ofcourse not。你将需要“免费”分配你的东西。 – ameyCU

你只需要免费手动使用malloc()。所以不行,根据指针它可能不会,甚至可能没有必要。