如何释放一个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 

编辑:我很遗憾忘记数数。 通常代码在上面。