0

我在 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));

但是,当我尝试按如下方式访问各个结构时,会出现段错误。

for (i = 0; i < 100; ++i) {
    tmp = buf + (i * sizeof(struct a));
    printf ("\t>%d>%ld,%ld\n", i, tmp->state, tmp->uid);
}

在前 10 个条目后,我遇到了段错误。我不知道为什么会这样。请帮忙。

4

3 回答 3

5

如果 buf 是指向结构 a 的指针,则指针数学应该是:

tmp = buf + i;
于 2012-09-27T21:49:37.653 回答
4

这一行是错误的:

tmp = buf + (i * sizeof(struct a));

您不需要乘以i数组中每个元素的大小,这是根据buf.


你实际上在做的是

tmp = &buf[i * sizeof(struct a)];

当你真正想做的是

tmp = &buf[i];
于 2012-09-27T21:50:15.123 回答
3

编译器已经sizeof()在指针算术期间处理了进程。因此,

ptr + i;

是相同的

&ptr[i];

使用是错误的

ptr + (i * sizeof(some_type));
于 2012-09-27T21:50:58.953 回答