INT主() {對準的存儲器不被_aligned_free功能釋放
INT *對準;
//對準值0xcccccccc {???}
對準=(INT *)_ aligned_malloc(的sizeof(int)的* 1000,16);
//對準值0x001d9490 {-842150451}
_aligned_free(對準);
////對準值0x001d9490 {-17891602}地址並沒有改變
*對齊== 100;
int * y;
// Y值0xcccccccc {???}
Y = INT新();
// Y值0x001d9480 {0}
刪除(Y);
// Y值0x00008123 {???}地址已經改變
* Y = 100; //給出例外
}
我的問題:
爲什麼在第4行代碼不給例外?這是否意味着_aligned_free沒有正確釋放內存?如果是,那麼我們應該如何釋放由_aligned_malloc分配的內存。
在情況1和5中,您正在讀取未初始化的值,這是一個錯誤。在情況4和8中,你正在從你釋放的記憶中讀取,這是一個錯誤。對於「爲什麼沒有錯誤的代碼做我所期望的」的通用答案是「這就是爲什麼我們修復錯誤,錯誤代碼沒有達到預期的程度,修復錯誤並且代碼將完成您的工作期望」。 –
謝謝大衛。我明白了這些是應該修復的錯誤。我對這個問題的意圖是爲什麼內存指向對齊(在_aligned_free之後)未被設置爲無效內存,而在y(在刪除之後)的情況下。它看起來對我來說(在閱讀註釋之後)更多類型的編譯器或堆釋放器的東西。我只是想確認一下。而已。 – coder