假设我有一个指向结构的指针数组,每个结构包含一个字符串,所以对于这样的事情:
printf("%s\n", array[0]);
Run Code Online (Sandbox Code Playgroud)
输出是:
Hello.
Run Code Online (Sandbox Code Playgroud)
如果我执行free(array)遗嘱这是免费array[0]的指向什么?("Hello.").
我花了好几个小时试图手动释放每个元素,而我得到的只是崩溃.我希望这是一个捷径:/
Pau*_*vie 22
这一切都取决于数组的分配方式.我举个例子:
例1:
char array[10];
free(array); // nope!
Run Code Online (Sandbox Code Playgroud)
例2:
char *array;
array= malloc(10); // request heap for memory
free(array); // return to heap when no longer needed
Run Code Online (Sandbox Code Playgroud)
例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);
Run Code Online (Sandbox Code Playgroud)
广告.示例1:数组在堆栈上分配("自动变量"),无法释放array.
广告.示例2:您使用从堆请求存储free.不再需要时,使用将其返回堆中malloc.
广告.示例3:声明一个指向字符的指针数组.首先为数组分配存储,然后为每个数组元素分配存储以放入字符串.当不再需要时,必须首先释放字符串(with free)然后释放数组本身(with free).
| 归档时间: |
|
| 查看次数: |
13503 次 |
| 最近记录: |