這個問題在這里已經有了答案: 沒有越界錯誤 (7 個回答) 3 天前關閉。
我正在為我的 C 課程研究動態陣列,但我對動態陣列的行為感到困惑。例如,如果我運行此代碼:
int* myDynamicArr = new int[3];
for (int i = 0; i < 10; i )
{
myDynamicArr[i] = i 1;
cout << myDynamicArr[i] << endl;
}
我希望它不會作業,因為我只將它宣告為 3 號。但是當我運行它時,它會列印出 0-9。如果我這樣做,同樣的事情:
char* myCharArr = new char[2];
strcpy(myCharArr, "ThisIsALongString");
cout << myCharArr;
即使它看起來應該失敗,它也會列印完整的字串。誰能解釋我在這里做錯了什么?謝謝!
uj5u.com熱心網友回復:
C 不對陣列執行邊界檢查。因此,當您讀取或寫入陣列的邊界時,您會觸發未定義的行為。
對于未定義的行為,您的程式可能會崩潰,可能會輸出奇怪的結果,或者它可能(如您的情況)似乎作業正常。
僅僅因為它可能崩潰并不意味著它會崩潰。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/342873.html
上一篇:cython使用類包裝器指標
