如何释放一个char指针数组?

时间:2014-05-02 20:45:43

标签: c arrays pointers malloc free

我使用此方法将列表中的值转换为数组,以便在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 ****

3 个答案:

答案 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]);
}

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