我正在处理 memcpy 以将一个数组复制到另一个数组:这是代码,(我也给出了声明)
.... /* s is a struct with int *t_con_cust; */
/* bad to use an equivalent name i guess ..*/
s.t_con_cust = malloc(nb_cust*sizeof(*s.t_con_cust));
int *t_con_cust = malloc(nb_cust*sizeof(*t_con_cust));
...
t_con_cust[0] = 1;
memcpy(s.t_con_cust, t_con_cust, nb_cust*sizeof(int));
fprintf(stdout, "s.t_con_cust[0] -> %d \n", s.t_con_cust[0]);
t_con_cust[0] = 0;
fprintf(stdout, "s.t_con_cust[0] -> %d \n", s.t_con_cust[0]);
执行给了我:
s.t_con_cust[0] -> 1
s.t_con_cust[0] -> 0
这超出了我的范围,因为当我尝试使用这样的“示例代码”时
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int *dest;
} lambda_struct;
int main(void) {
lambda_struct s;
s.dest = malloc(10*sizeof(*s.dest));
int *src = malloc(10*sizeof(*src));
int i;
for(i = 0; i < 10; ++i)
src[i] = 1;
memcpy(s.dest, src, 10);
fprintf(stdout, "dest[0] -> %d \n", s.dest[0]);
src[0] = 0;
fprintf(stdout, "dest[0] -> %d \n", s.dest[0]);
free(src);
free(s.dest);
return 0;
}
执行给了我预期的结果,-> 1 和 1。
有什么想法吗?谢谢
最佳答案
如果这段代码
fprintf(stdout, "s.t_con_cust[0] -> %d \n", s.t_con_cust[0]);
t_con_cust[0] = 0;
fprintf(stdout, "s.t_con_cust[0] -> %d \n", s.t_con_cust[0]);
结果
s.t_con_cust[0] -> 1
s.t_con_cust[0] -> 0
那么唯一有意义的解释就是
t_con_cust == s.t_con_cust
如果该条件不成立,那么对 t_con_cust[0]
的赋值会如何影响 s.t_con_cust[0]
?
我预测,当你测试这两个指针是否相等时,你会发现它们确实相等。然后您只需要找到将两个指针分配给相同值的代码部分。
关于c - memcpy 和 "alias"的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8964219/