我使用此方法将列表中的值转换为数组,以便在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():下一个大小无效(快):0x000000000060c180 ****
答案 0 :(得分:5)
问题是(*array)++
没有为您分配下一个指针,因此您无法释放它。你的自由日常应该是:
void freeargpointer(char** array, int count)
{
int i;
for ( i = 0; array[i]; i++ )
free( array[i] );
free( array );
}
或类似地,
void freeargpointer(char** array, int count)
{
char **a;
for ( a = array; *a; a++ )
free( *a );
free( array );
}
答案 1 :(得分:3)
这条线错了。
(*array)++;
你需要拥有。
++array;
答案 2 :(得分:0)
我试过这段代码并且它有效,也许它可以帮到你。
void freeargpointer(char **array, int count)
{
for(int i=0;i<count;++i)
free(++array[i]);
}
编辑:我很遗憾忘记数数。通常代码在上面。