我正在处理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;
}
执行给我预期的结果, - &gt; 1和1。
有什么想法吗?谢谢
答案 0 :(得分:2)
如果此代码
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] - &gt; 1
s.t_con_cust [0] - &gt; 0
然后唯一有意义的解释是
t_con_cust == s.t_con_cust
如果该条件不正确,那么t_con_cust[0]
的分配如何影响s.t_con_cust[0]
?
我预测,当你测试两个指针的相等性时,你会发现它们确实是平等的。然后你只需要找到将两个指针分配给相同值的代码部分。