gpt4 book ai didi

c - 释放指针数组

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:02 25 4
gpt4 key购买 nike

假设我有以下 main 函数:

int main(void) {
char * strings[] = { "a", "b", "c", NULL};
char **xstrings = malloc (4 * sizeof *xstrings);
}

释放 xstrings 的正确方法是什么?例子是:

free(xstrings)

或者:

    while (*xstrings) {  
free (*xstrings);
*xstrings++ = NULL;
}
}

这两种方式有什么区别,一种是对的,另一种是错的,或者它们有什么不同?

最佳答案

第一个例子是正确的,虽然

char * strings[] = { "a", "b", "c", NULL};

线路未使用。

#include <stdio.h>
#include <stdlib.h>

int main() {
char **xstrings = malloc(4 * sizeof *xstrings);
free(xstrings);
return 0;
}

上面我们为4个char *指针分配了空间,并正确的释放了内存。

不过,通常情况下,我们希望为每个 char * 指针分配内存(除非 xstrings 变量最终指向一些数据):

#include <stdio.h>
#include <stdlib.h>

int main() {
int len = 4;
char **xstrings = malloc(len * sizeof *xstrings);

for (int i = 0; i < len; i++) {
xstrings[i] = malloc(sizeof(*xstrings[i]) * some_length);
}

/* ... do something with the memory ... */

/* free each xstring element */

for (int i = 0; i < len; i++) {
free(xstrings[i]);
}

free(xstrings);
return 0;
}

线条

while (*xstrings) {  
free (*xstrings);
*xstrings++ = NULL;
}

意义不大。一旦内存空闲d,就不能再使用了。您可以使用临时变量来实现这一点,但与简单地使用 for 循环相比会有点痛苦(我们不想放弃原来的 xstrings 指针,以便我们稍后可以释放它,我们需要在循环中有一个临时变量,以便在向前移动指针后调用 free

关于c - 释放指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58151194/

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