Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么memcpy会更改原始数组的最后一个元素?_C - Fatal编程技术网

为什么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位系统上结束。