簡體   English   中英

結構中的2D陣列-是否可能?

[英]2D array in a struct - is is possible?

我正在嘗試制作一個帶有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");
    }
}

和我的免費,這似乎是導致錯誤的原因:

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

除了用字符填充數組(使用for循環)並調用mvprintw()之外,我實際上對數組沒有做太多事情,因此我認為問題不在兩者之間。 我做錯了什么?

編輯:所以我應該澄清一下,但是width == height == size,變量在不同的文件中,所以它們的確有所不同

EDIT2:顯然是height!= width,我什至不能保持自己的變量名直!

分配時使用:

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

釋放時,您可以使用:

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

如果width!= size,您將遇到問題。

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來自哪里?

除此之外,還可以,您能否提供代碼以使其使用?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM