gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:09:50 25 4
gpt4 key购买 nike

假设我有一个指向结构的指针数组,每个结构都包含一个字符串,所以对于这样的事情:

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

输出是:

Hello.

如果我执行free(array),这会释放array[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:array 在堆栈上分配(“自动变量”)并且不能通过 free 释放。当函数返回时,它的堆栈空间将被释放。

广告。示例 2:您使用 malloc 从堆中请求存储。当不再需要时,使用 free 将它返回到堆中。

广告。示例 3:您声明了一个指向字符的指针数组。首先为数组分配存储空间,然后为每个数组元素分配存储空间以放置字符串。当不再需要时,必须先释放字符串(使用free),然后释放数组本身( 免费)。

关于C - 释放指针数组是否也会释放它们所指向的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33170802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com