为什么memcpy会改变原始数组的最后一个元素?

时间:2017-04-17 00:03:04

标签: c

我在这段代码中遇到了一个奇怪的错误:

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)); 

如果我打印出数组a,输出= 2,3,...,19 0

预期产量应为2,3,......,19,20。

将数组复制到b上会对最后一个元素产生奇怪的影响。

1 个答案:

答案 0 :(得分:2)

N元素数组包含有效索引01,...,N - 1。你的最后一轮循环访问a[N],它超出界限并且有未定义的行为。