我在C中有以下结构。
struct a {
long state;
long uid;
long w, x, y, z, xx, yy, zz, xxx, yyy, zzz;
char comm[64];
};
然后我按如下方式进行malloc
。
buf = malloc (100 * sizeof(struct a));
但是当我尝试按如下方式访问各个结构时,我得到一个seg错误。
for (i = 0; i < 100; ++i) {
tmp = buf + (i * sizeof(struct a));
printf ("\t>%d>%ld,%ld\n", i, tmp->state, tmp->uid);
}
我在前10个条目后遇到了一个段错误。我不知道为什么会这样。请帮忙。
答案 0 :(得分:5)
如果buf是指向结构a的指针,则指针数学应为:
tmp = buf + i;
答案 1 :(得分:4)
这一行错了:
tmp = buf + (i * sizeof(struct a));
您不需要将i
乘以数组中每个元素的大小,这是根据buf
的类型隐式完成的。
你实际在做的是
tmp = &buf[i * sizeof(struct a)];
当你真正想做的事情是
tmp = &buf[i];
答案 2 :(得分:3)
编译器在指针运算期间已处理sizeof()
进程。因此,
ptr + i;
与
相同&ptr[i];
使用
错误ptr + (i * sizeof(some_type));