本帖最后由 RyanBern 于 2016-9-18 09:00 编辑
struct A1{ double data[5]; };
struct A1{
double data[5];
};
struct A2{ double *data; };
struct A2{
double *data;
};
下面两个有本质的区别啊,不要把它们当成一样的了喂!
printf("%d %d\n", sizeof(struct A1), sizeof(struct A2));
printf("%d %d\n", sizeof(struct A1), sizeof(struct A2));
这样会看到很明显的不同。
概况来说,如果是动态分配的内存,是绝对不可以这样玩的。
struct A{ double *data; }; int main(int argc, char **argv){ struct A a1, a2; /* suppose we call 'constructors' for a1 and a2 */ init(&a1, n); init(&a2, n); a2 = a1; /* the problem occurs ! */ a1.data[0] = 1; /* then what is a2.data[0]? */ /* suppose we call 'destructors' for a1 and a2 */ finalize(&a1); finalize(&a2); /* core dumped !*/ return 0; }
struct A{
double *data;
};
int main(int argc, char **argv){
struct A a1, a2;
/* suppose we call 'constructors' for a1 and a2 */
init(&a1, n); init(&a2, n);
a2 = a1; /* the problem occurs ! */
a1.data[0] = 1; /* then what is a2.data[0]? */
/* suppose we call 'destructors' for a1 and a2 */
finalize(&a1); finalize(&a2); /* core dumped !*/
return 0;
}
写得有点仓促,但是我觉得意思应该表示清楚了。 |