为什么memcpy会更改原始数组的最后一个元素?
我在这段代码中遇到了一个奇怪的错误:为什么memcpy会更改原始数组的最后一个元素?,c,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)); int*a=(int*)malloc(N*sizeof(int));//分配数组 int i; 对于(i=2;i一
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));
int*a=(int*)malloc(N*sizeof(int));//分配数组
int i;
对于(i=2;i一个N
元素数组具有有效的索引0
,1
,…,N-1
。您的最后一轮循环访问a[N]
,这超出了范围,并且具有未定义的行为。与您的问题无关:不确定您应该在最后一行中使用N*sizeof(b)
。sizeof(b)
会给你一个int指针的大小,而你想要一个int的大小。我希望访问不好
因为ii如果我使用了sizeof(b),我会出错。如果使用了sizeof(int),输出仍然是相同的sizeof(b)
可以是4字节(i686)或8字节(x8664),你应该选择sizeof(int)
@John J给出的代码没有任何意义。因此,讨论某些内容发生更改的原因是无用的。这一点,以及他的memset
将在具有32位整数的64位系统上结束。