C – 释放指针数组是否也释放了他们所指向的内容?
发布时间:2020-12-16 10:53:46 所属栏目:百科 来源:网络整理
导读:假设我有一个指向结构的指针数组,每个结构包含一个字符串,所以对于这样的事情: printf("%sn",array[0]); 输出是: Hello. 如果我执行一个free(数组)会释放数组[0]指向的那个吗? (“你好.”). 我花了好几个小时试图手动释放每个元素,而我得到的只是崩溃.我
假设我有一个指向结构的指针数组,每个结构包含一个字符串,所以对于这样的事情:
printf("%sn",array[0]); 输出是: Hello. 如果我执行一个free(数组)会释放数组[0]指向的那个吗? (“你好.”). 我花了好几个小时试图手动释放每个元素,而我得到的只是崩溃.我希望这是一个捷径:/ 解决方法
这一切都取决于数组的分配方式.我举个例子:
例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:数组在堆栈上分配(“自动变量”),不能免费释放. 广告.示例2:使用malloc从堆请求存储.不再需要时,使用free将其返回堆中. 广告.示例3:声明一个指向字符的指针数组.首先为数组分配存储,然后为每个数组元素分配存储以放入字符串.当不再需要时,必须首先释放字符串(使用free)然后释放数组本身(使用free). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |