加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读