[英]Filling an array causes the stack around the array to be corrupted
我正在嘗試使用for循環內的for循環用0-25之間的隨機數填充4x6數組。 生成數組后發生運行時錯誤-“圍繞變量“ grid”的堆棧已損壞。這是什么引起的?
int grid[4][6];
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 6; x++) {
grid[x][y] = (rand() % 25);
}
}
您寫得越界越好。 您的循環可以例如在數組的邊界之外的(5,3)處編寫。 為了解決此問題,請將x
用於外部循環,將y
用於內部循環。
我認為您的索引向后,在x處應為y,反之亦然
正如其他人所說,您已經將行和列索引向后了。 這是一個問題的原因是在C和C ++中,二維數組訪問:
grid[x][y]
被視為等效的指針表達式:
*(grid + (x*COLS + y))
在這種情況下,由於C和C ++使用行優先順序,因此COLS為6。此外,2D數組等效於大小為1D的數組(ROWS * COLS),這意味着在這種情況下,您可以有效地尋址元素0到23一維數組
現在,查看循環結構,可以看到給定指針算術規則,當x為4且y為0時,將訪問元素24(從而破壞堆棧),即*(grid + 4 * 6 + 0),或您的內部循環的第4次迭代。
切換循環順序(0 <= x <4和0 <= y <6),您的問題將消失。
int grid[6][4];
您可以使用gdb
, valgrind
或其他任何方法來找出分段錯誤的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.