C语言 指针操作期间的 Seg 错误



>我在 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,%ldn", i, tmp->state, tmp->uid);
}

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

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

tmp = buf + i;

这一行是错误的:

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

您无需将i乘以数组中每个元素的大小,这是根据buf的类型为您隐式完成的。


你实际上在做的是

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

当你真正想做的是

tmp = &buf[i];
编译器

已经在指针算术期间处理sizeof()前进。因此

ptr + i;

&ptr[i];

使用是错误的

ptr + (i * sizeof(some_type));

相关内容

  • 没有找到相关文章

最新更新