我有以下C代码:
char *a, *b;
int count;
a = malloc(10);
b = malloc(10);
for(count=0;count<10;count++){
b[count] = 'a';}
memcpy(&a, &b, 10);
for(count=0;count<10;count++){
printf("%c %c\n", a[count], b[count]);}
free(b);
for(count=0;count<10;count++){
printf("%c, ", a[count]);}
但是,在输出中,似乎通过释放b删除了数组a的前8个元素:
./a.out
a a
a a
a a
a a
a a
a a
a a
a a
a a
a a
, , , , , , , , a, a,
有人可以尝试解释一下这里发生了什么吗?我似乎找不到发生这种情况的原因。
最佳答案
我实际上无法重现您的问题(在Visual Studio / MSVC中),但是此行引起了一个问题(几乎肯定是 undefined 的行为):
memcpy(&a, &b, 10);
a
和b
变量已经是指针,因此您无需将其地址传递给memcpy
。只需使用:memcpy(a, b, 10);
在您的代码中,您可能会覆盖存储在两个指针或两个指针中的地址值。
编辑:
clang-cl
编译器发现了问题,给出了这一点: