如何释放一个char指针数组?
我使用此方法将列表中的值转换为数组,以便在execvp()中使用 – 系统调用:
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 ****
问题是(*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 ); }
这条线错了。
(*array)++;
你需要拥有。
++array;
我试过这个代码并且它可以工作,也许它可以帮到你。
void freeargpointer(char **array, int count) { for(int i=0;i
编辑:我很遗憾忘记数数。 通常代码在上面。