[英]malloc touching unallocated memory
我想知道為什么我的分配有效。 我創建了ptr
,它是一個指針, ptr2
是與ptr
位於同一位置的指針。
這是我的代碼:
int* ptr = malloc(sizeof(int));
int* ptr2 = ptr;
*ptr2 = 1;
ptr2 = ptr+1;
*ptr2 = 2;
最后,我有一個由兩個整數組成的數組:
ptr[0] = 1
ptr[1] = 2
我的問題是:為什么我可以在沒有錯誤或警告的情況下將值 2 影響到ptr2
? 我只對數組中的一個整數位置進行了malloc()
-ed,不是嗎?
這里的問題是,通過說
ptr2 = ptr+1;
你指的是內存溢出。 接下來在 deerencing 時,您調用undefined behavior 。 現在,無論如何都不能證明 UB 的結果是合理的。
C 中沒有任何固有的東西可以阻止您訪問越界(或無效)內存,但這樣做的結果是 UB。
也就是說,只是一個建議,在使用該指針之前,您應該始終檢查malloc()
的返回值,以避免在malloc()
失敗的情況下通過取消引用NULL
指針來避免 UB。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.