指针操作期间的Seg Fault

时间:2012-09-27 21:47:33

标签: c pointers struct segmentation-fault malloc

我在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个条目后遇到了一个段错误。我不知道为什么会这样。请帮忙。

3 个答案:

答案 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));