2017-04-17 46 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

我明白了,谢谢 –

相关问题