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