如何取消分配二维数组的char指针

问题描述

我有一个2D数组,像这样:

    char * array[2][2];

我希望它存储char *,所以我尝试使用以下方法malloc()

    for(i=0:i<2;i++){
        for(j=0:j<2;j++)
        {
            array[i][j]=(char*)malloc(sizeof(char  *)*2);
        }
    }

然后,我将char *的某些元素存储在2D数组中,并且2D数组可以将它们打印出来,这很好。

然后我尝试使用以下方法取消分配2D数组:

    for(i=0:i<2;i++){

        for(j=0:j<2;j++){
         
            free(array[i][j]);
        }
    }

运行程序时,我收到一条“ free():无效指针”消息。

我尝试使用Valgrind,它报告了我所有的分配和释放都已计入。但是,这表明我已经“绝对丢失”了一些字节。

任何观点或想法都会有所帮助。

下面是一个示例代码来演示我在说什么:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{   
    char * r0c0 = " hello ";
    char * r0c1 = " bye ";
    char * r1c0 = " this ";
    char * r1c1 = " is me ";
    
    int i=0;
    int j=0;
    for(i=0;i<2; i++)
    {
        for(j=0;j<2;j++)
        {
            *(*(array+i)+j) = (char *)malloc(sizeof(char *)*2);
        }
    }

    array[0][0]= r0c0;
    array[0][1]= r0c1;
    array[1][0]= r1c0;
    array[1][1]= r1c1;
    
    for(i=0;i<2;i++)
    {
        for(j=0;j<2;j++)
        {
            printf("%s\t",array[i][j]);
        }
        printf("\n");
    }

    for(i=0;i<2; i++)
    {
        for(j=1;j>=0;j--)
        {
            free(*(*(array+i)+j));
        }
    }
     
    return EXIT_SUCCESS;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)