我正在運行一個小示例。我的代碼是瞭解訪問內存中的堆損壞情況
int main()
{
char * mymem = new char[8];
//1
memcpy(mymem+8,"hello",5); //this cause heap corruption
//2
mymem[32]='a'; //this doesn't cause heap corruption
//3
delete [] mymem;
return 0;
}
在上面的代碼,如果我執行1然後我得到堆損壞刪除即3, 但如果再執行2我沒有得到刪除IE 3.我很好奇任何堆損壞要知道爲什麼會發生這種情況,因爲在兩種情況下,我都試圖在分配的內存之外寫入數據。
它們都會導致堆損壞。就是這樣,偶然的情況下,你只會在第一個例子中看到崩潰。 – 2014-09-27 14:51:34
「// 1」和「// 2」都超出邊界訪問權限,這會導致未定義的行爲。它可能會破壞堆棧,或者可能會做其他事情,或者什麼也不做。它沒有定義。 – 2014-09-27 14:52:18
我試圖在Windows和Linux上運行,但在第二種情況下,我沒有得到堆腐敗錯誤 – singh 2014-09-27 14:52:38