【发布时间】:2017-03-07 16:43:00
【问题描述】:
我尝试使用 memcpy 将内容从一个数组复制到另一个数组,代码如下:
#include <stdio.h>
int main(){
int *a;
a = (int*) malloc(sizeof(int) * 4);
a[0] = 4;
a[1] = 3;
a[2] = 2;
a[3] = 1;
int *b;
b = (int*) malloc(sizeof(int) * 4);
memcpy(&b, &a, sizeof(a));
free(a);
for (int i = 0; i < 4; i++){
printf("b[%d]:%d",i,b[i]);
}
printf("%d\n",sizeof(b));
free(b);
return 0;
}
但是,当我尝试运行它时,遇到以下错误:
b[0]:4b[1]:3b[2]:2b[3]:18
mem(6131,0x7fffbb4723c0) malloc: *** error for object 0x7fa5a4c02890: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6
如果我删除free(b) 这段代码,这个错误就会消失,但是,我不知道为什么,因为我明确地为它分配了资源。
【问题讨论】:
-
您需要花时间来了解指针和指针之间的区别。什么持有和地址,以及该地址的内容。
-
memcpy(&b, &a, sizeof(a));用 a 中的地址覆盖 b 中的地址,因此 b 之后相同,这就是为什么free(a)也释放b