C 结构中的二维数组-是否可能?
我试图创建一个包含2D数组的结构来存储字符串。但是当我执行程序的时候,我总是得到一个双重自由错误 结构: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
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));