我不知道錯誤是什麼,因爲這是在Windows上,我不知道如何逐步通過Windows上的程序執行。關於爲什麼程序在這裏崩潰的任何想法(請參閱註釋行)?我認爲這可能與內存濫用有關。傳遞C字符數組並分配導致程序崩潰
#define TABLE_MAX_ROW 500
#define TABLE_MAX_COL 20
#define TABLE_MAX_ELT_LEN 60
從這裏開始:
foo()
{
char table[TABLE_MAX_ROW][TABLE_MAX_COL][TABLE_MAX_ELT_LEN];
bar(table);
}
傳遞給該函數:
bar(char table[TABLE_MAX_ROW][TABLE_MAX_COL][TABLE_MAX_ELT_LEN])
{
unsigned int col, row;
if (table == NULL) { // crashes here
printf("error: table == NULL!\n");
return -1;
}
for (row = 0; row < TABLE_MAX_ROW; row++)
for (col = 0; col < TABLE_MAX_COL; col++)
table[row][col][0] = '\0'; // if above if block commented out, crashes here
return 0;
}
這是一個非常大的數組分配在堆棧中。如果將「最大」值更改爲1 1和1,會發生什麼情況? – ddyer 2012-08-14 19:13:45
我無法重現Windows Visual C++ Express中的任何崩潰。 – MRAB 2012-08-14 19:19:43
在我的機器上運行良好,使用MinGW編譯,包含windows.h和iostream。 – Dmitriy 2012-08-14 19:19:55