C – 释放指针数组是否也释放了他们所指向的内容?

C – 释放指针数组是否也释放了他们所指向的内容?,第1张

概述假设我有一个指向结构的指针数组,每个结构包含一个字符串,所以对于这样的事情: printf("%s\n", array[0]); 输出是: Hello. 如果我执行一个free(数组)会释放数组[0]指向的那个吗? (“你好.”). 我花了好几个小时试图手动释放每个元素,而我得到的只是崩溃.我希望这是一个捷径:/ 这一切都取决于数组的分配方式.我举个例子: 例1: char array[10]; 假设我有一个指向结构的指针数组,每个结构包含一个字符串,所以对于这样的事情:

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

输出是:

Hello.

如果我执行一个free(数组)会释放数组[0]指向的那个吗? (“你好.”).

我花了好几个小时试图手动释放每个元素,而我得到的只是崩溃.我希望这是一个捷径:/

解决方法 这一切都取决于数组的分配方式.我举个例子:

例1:

char array[10];free(array);     // nope!

例2:

char *array;array= malloc(10);   // request heap for memoryfree(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).

总结

以上是内存溢出为你收集整理的C – 释放指针数组是否也释放了他们所指向的内容?全部内容,希望文章能够帮你解决C – 释放指针数组是否也释放了他们所指向的内容?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1223628.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存