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

しかし、次のように個々の構造体にアクセスしようとすると、seg fault が発生します。

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 に答える