所以,我有這樣的代碼:爲什麼沒有這個崩潰?
int randomNumber;
int max = 16;
int swap;
int table[16];
srand(time(NULL));
for (int i = 0; i < 16; ++i)
table[i] = i + 1;
for (int i = 0; i < 16; ++i) {
randomNumber = rand() % max;
swap = table[max];
table[max] = tablica_losowa[losuj];
table[losuj] = swap;
--max;
}
顯然,這個問題應該是第一次通過第二個for循環時最大== 16,我嘗試訪問表[MAX],但它編譯運行良好。
這是來自iPad(最新軟)應用程序,用Objective-C,XCode 4.6,Apple LLVM Compiler 4.2編寫。
任何提示?
是的,你是對的,我意識到這一點,但當我訪問數組超出範圍時,我習慣了代碼崩潰。你知道這個行爲是否特定於Objective-C,iPad(內存管理?)還是編譯器?坦率地說,我正在尋找一個更深入的答案,如果有可能:) – Losiowaty 2013-03-15 11:16:20
我認爲OP是來自Java或類似的背景,其中outOfBound異常生成並崩潰。 – 2013-03-15 11:16:29
Losiowaty編譯器根本沒有做任何事情來解決這裏的問題。我認爲@AnoopVaidya是正確的,你的經驗可能是在這種情況下,環境迫使崩潰的語言? Objective C基於C ...在某些方面它有點緊,但只要語法正確,C是一種語言,無論它有多麼無效,都可以讓你做很多事情。在你的情況下,寫入表[16]可能會寫入一個不重要的內存位置。它可能會寫入_swap_,然後被覆蓋。檢查組件以確定。 – mah 2013-03-15 11:20:48