首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于结构体 动态分配的有关问题

2012-08-08 
关于结构体 动态分配的问题struct s_ccab{char type[NAME_LEN]char in_a[NAME_LEN]char in_b[NAME_LEN]

关于结构体 动态分配的问题
struct s_ccab
{
char type[NAME_LEN];
char in_a[NAME_LEN]; 
char in_b[NAME_LEN]; 
char in_c[NAME_LEN]; 
char out_z[NAME_LEN];
char out_nz[NAME_LEN];
};
这样申请的空间
ccab = (struct s_ccab *)my_malloc(sizeof(struct s_ccab));

赋值结束后 把指针调回初始位置

打印数据后

printf("%s\n", ccab[0].type);
printf("%s\n", ccab[0].in_a);
printf("%s\n", ccab[0].in_b);
printf("%s\n", ccab[0].in_c);
printf("%s\n", ccab[0].out_z);
printf("%s\n", ccab[0].out_nz);
printf("%s\n", ccab[1].type);
printf("%s\n", ccab[1].in_a);
printf("%s\n", ccab[1].in_b);
printf("%s\n", ccab[1].in_c);
printf("%s\n", ccab[1].out_z);
printf("%s\n", ccab[1].out_nz);

结果数据就错行了 第一组对 之后每个错后一个






[解决办法]
...
每次循环分配一次
ccab = (struct s_ccab *)my_malloc(sizeof(struct s_ccab));
结果不能当
第一次是ccab[0],第二次当ccab[1]用
当然不不能保证两次分配内存是连续啦,本来就没关系
要分配出连续两个数据块要这样
每次循环分配一次
ccab = (struct s_ccab *)my_malloc(sizeof(struct s_ccab)*2);

热点排行