gpt4 book ai didi

c - 如何释放一个字符指针数组?

转载 作者:太空狗 更新时间:2023-10-29 15:58:11 26 4
gpt4 key购买 nike

我使用此方法将列表中的值转换为数组,以便在 execvp()-Systemcall 中使用:

char **list2argarray(struct shellvalue *values, int count)
{
char **array = (char **)malloc((count + 1) * sizeof(char *));
int i = 0;

while (values)
{
char *word = values->word;

array[i] = (char *)malloc(sizeof(word) + 1);
strcpy(array[i], word);
values = values->next;
i++;
}
array[i] = NULL;
return array;
}

释放此类数组的正确方法是什么?我用

这样的东西试过了
void freeargpointer(char **array, int count)
{
int i = 0;

while (*array)
{
free(*array);
(*array)++;
}
}

但是每次当我到达 free-syscall 时,在调试时,程序都会崩溃并出现如下错误:

free(): invalid next size (fast): 0x000000000060c180 ****

最佳答案

问题是 (*array)++ 没有给你分配的下一个指针,所以你不能释放它。你的免费例程应该是:

void freeargpointer(char** array)
{
int i;

for ( i = 0; array[i]; i++ )
free( array[i] );

free( array );
}

或者,类似地,

void freeargpointer(char** array)
{
char **a;

for ( a = array; *a; a++ )
free( *a );

free( array );
}

注意:我删除了 count 参数,因为它是不必要的。

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

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