2017-04-17 71 views
-4

我遇到了一個奇怪的錯誤在此代碼:爲什麼memcpy會改變原始數組的最後一個元素?

int *a = (int*) malloc(N*sizeof(int)); // allocate array 
int i; 
for (i=2; i<=N; i++) 
{ 
    a[i] = i; 
} 

int *b = (int*) malloc(N*sizeof(int)); 
memcpy(b, a, N*sizeof(b)); 

如果我打印出數組,輸出= 2,3,...,19 0

鑑於預期的輸出應該是2,3,...,19,20。

將數組複製到b奇怪地影響了最後一個元素。

+0

與您的問題無關:不確定您應該在最後一行使用'N * sizeof(b)'。 'sizeof(b)'會給你一個int指針的大小,而你想要一個int的大小。 –

+0

我期待'BAD_ACCESS'因爲'i <= N' – 2017-04-17 00:09:39

+0

如果我使用sizeof(b),我會得到錯誤。如果使用sizeof(int),輸出仍然相同 –

回答

2

N元素的數組具有有效索引0,1,...,N - 1。您的最後一輪循環訪問a[N],這是超出界限並具有未定義的行爲。

+0

這和他的memset將會在32位整數的64位系統上結束。 – dasblinkenlight

+0

我明白了,謝謝 –

相關問題