Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 结构中的二维数组-是否可能?_C_Arrays_Memory Management_Malloc_Structure - Fatal编程技术网

C 结构中的二维数组-是否可能?

C 结构中的二维数组-是否可能?,c,arrays,memory-management,malloc,structure,C,Arrays,Memory Management,Malloc,Structure,我试图创建一个包含2D数组的结构来存储字符串。但是当我执行程序的时候,我总是得到一个双重自由错误 结构: struct room{ int x; int y; char ** floor; }; 这是我的malloc: struct room * newRoom = malloc(sizeof(struct room)); newRoom->floor = malloc(sizeof(char *) * height); if(ne

我试图创建一个包含2D数组的结构来存储字符串。但是当我执行程序的时候,我总是得到一个双重自由错误

结构:

    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");
    }
}
struct room*newRoom=malloc(sizeof(struct room));
新房->楼层=malloc(大小(字符*)*高度);
如果(新房->楼层==NULL | |新房==NULL)
{
printf(“房间分配失败\n”);
}
对于(i=0;ifloor[i]=malloc(sizeof(char)*(width+1));
如果(新建房间->楼层[i]==NULL)
{
printf(“房间字符串分配失败\n”);
}
}
还有我的自由,这似乎是导致错误的原因:

for(i=0; i<size ;i++)
{
    free(toBeFreed->floor[i]);
}
free(toBeFreed->floor);
free(toBeFreed);
for(i=0;ifloor[i]);
}
免费(托比种子->地板);
自由(托比种子);
除了用字符填充数组(用于循环)并调用mvprintw()之外,我对数组没有做太多的处理,所以我认为问题不在这两者之间。我做错了什么

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


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

当分配给您使用:

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

for(i=0;i分配时使用:

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

+2从哪里来

除此之外,它看起来还行,您能提供您想要如何使用它的代码吗

+2从哪里来


除此之外,它似乎还行,您能提供您想如何使用它的代码吗?

之所以使用+2,是因为我最初认为我在使用“\0”字符时遇到了问题,我将其改回+1,谢谢,高度=大小=宽度,它们是来自不同文件的片段,所以在复制时我忘记了更改它们/pasting@Snipe07但它仍然不起作用?如果因此,您可能正在调用执行两次释放的例程?您是否尝试在自由例程上设置断点并使其陡峭,以查看值是什么?nevermind height!=width lol我需要使用更好的变量名!谢谢!+2是因为我最初认为我在使用“\0”字符时遇到问题,我更改了此back到+1谢谢,高度=大小=宽度,它们是来自不同文件的片段,所以复制时我忘了更改它们/pasting@Snipe07但它仍然不起作用?如果是这样的话,你很可能是在调用程序,谁做了两次释放?你有没有尝试在自由程序上设置一个断点,并将其陡峭,以查看值是什么?无需考虑高度!=宽度lol我需要使用更好的变量名!谢谢!
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));