结构中的2D数组是可能的吗?

时间:2011-03-12 20:53:30

标签: c arrays memory-management malloc structure

我正在尝试在其中创建一个包含2D数组的结构来存储字符串。但是当我执行程序

时,我不断出现双重错误

struct:

    struct room{
        int x;
        int y;
        char ** floor;
};

这是我的malloc:

struct room * newRoom = malloc(sizeof(struct room));
newRoom->floor = malloc(sizeof(char *) * height);
if(newRoom->floor == NULL || newRoom == NULL)
{
    printf("Room allocation failed \n");
}
for(i=0; i<width ;i++)
{
    newRoom->floor[i] = malloc(sizeof(char) * (width + 1));
    if(newRoom->floor[i] == NULL)
    {
        printf("Room string allocation failed \n");
    }
}

和我的自由,这似乎是导致错误的原因:

for(i=0; i<size ;i++)
{
    free(toBeFreed->floor[i]);
}
free(toBeFreed->floor);
free(toBeFreed);

除了用字符填充它(使用for循环)并调用mvprintw()之外,我对数组没有太多帮助,所以我不会认为问题介于两者之间。我做错了什么?

编辑:所以我应该澄清但宽度==高度==大小,变量在不同的文件中,所以它们确实有所不同

EDIT2:显然身高!=宽度,我甚至不能保持自己的变量名称!

2 个答案:

答案 0 :(得分:3)

分配时,请使用:

for(i=0; i<width ; i++)

释放时,您使用:

for(i=0; i<size ;i++)

如果宽度!=尺寸,您将遇到问题。

答案 1 :(得分:1)

for(i=0; i<width ;i++)

应该是

for(i=0; i<height;i++)

正确?

for(i=0; i<size ;i++)
{
    free(toBeFreed->floor[i]);
}

应该是

for(i=0; i<height;i++)
{
    free(toBeFreed->floor[i]);
}

另外

malloc(sizeof(char) * (width + 2));

+2来自哪里?

除此之外看起来还不错,你能提供你想用它的代码吗?