2017-01-08 81 views
0

我想知道爲什麼我的配置工作。我創建了ptr這是一個指針,並且ptr2指向與ptr相同的位置。malloc觸摸未分配的內存

這裏是我的代碼:

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對於我的數組中的一個整數位置,不是嗎?

+2

未定義的行爲是* undefined *。 – EOF

+1

可能重複的[沒有越界錯誤](http://stackoverflow.com/questions/9137157/no-out-of-bounds-error) – EOF

+0

[正在訪問一個全局數組超出其約束未定義的行爲? ](http://stackoverflow.com/questions/26426910/is-accessing-a-global-array-outside-its-bound-undefined-behavior) –

回答

4

這裏的問題是,說

ptr2 = ptr+1; 

你指向了綁定的內存。接下來,您將調用undefined behavior。現在,UB的結果無論如何都是不合理的。

C中沒有任何固有的東西可以阻止你訪問出界(或無效)內存,但這樣做的結果是UB。

這就是說,只是一個建議,你應該總是使用指針,以避免UB提領NULL指針,在malloc()失敗的情況下前檢查的malloc()返回值。

+0

感謝您的回答。所以如果我想讓它變得更好,我可以使用像'realloc'這樣的東西? –

+0

@CallisteHanriat這是正確的路要走。 –