试图释放这个2d阵列

时间:2014-06-18 02:07:39

标签: c memory malloc free

当我运行应用程序时,它会在遇到destroy函数时出现错误,我不知道为什么。任何想法都可能是伟大的,也许它来自分配功能,但一切正常,直到我做了销毁功能。

int main(void)
{
    char** strings;
    allocate(&strings, 48);
    //....does stuff with data
    destroy(&strings, 48);
}

void allocate(char ***strings, int size)
{
    *strings = (char**)malloc(size * sizeof(char*));
    if(strings == NULL)
    {
            printf("Could not allocate memory\n");
    }

    int i;
    for(i=0;i<size;i++)
    {
            (*strings)[i] = (char*)malloc(MAX_STRING_LEN * sizeof(char));
            if(strings == NULL)
            {
                    printf("Could not allocate memory\n");
            }
    }
}



void destroy(char ***strings, int size)
{
    int j;
    for(j=0;j<size;j++)
    {
            free(strings[j]);
    }
    free(strings);
}

1 个答案:

答案 0 :(得分:4)

您忘记在销毁函数中取消引用strings指针:

void destroy(char ***strings, int size)
{
    int j;
    for(j=0;j<size;j++)
    {
            free( (*strings)[j] );
    }
    free(*strings);
}