2

リンクされたリストに問題があります。私は2つの構造を持っています:

struct ekstra
{
    char isim[256];
    int deger;
    struct ekstra *sonra;
};

struct node
{
    char name[256];
    int val;
    struct ekstra *next;    
};

そして私はこれらを持っています:

struct ekstra *tmp;
struct node dizi[12];

私のコードのどこかに

tmp = dizi[k].next;
tmp=tmp->sonra;

そして、私がこれを行うと:

tmp = malloc(sizeof(struct ekstra));

問題はない。

しかし、私がこれを行うと:

dizi[k].next->sonra = malloc(sizeof(struct ekstra));

SegFault が発生します。なぜこうなった?

4

2 に答える 2

3

この行:

dizi[k].next->sonra = malloc(sizeof(struct ekstra));

間接参照しています

dizi[k].next

そして、私はそれがジャンク値を持っていると思います。

于 2012-06-08T00:04:16.343 に答える
0

これらの 2 行:

tmp = dizi[k].next;
tmp = tmp->sonra;

おそらく、無効なポインターを にコピーしますtmp。に を代入するtmpmalloc()、 からの有効なポインタがmalloc()に既にある無効な値を上書きしますtmp

使用する場合:

dizi[k].next->sonra = malloc(sizeof(struct ekstra));

(メンバーが格納されているアドレスを評価するためにsonra) 無効なポインターを参照しており、それがセグメンテーション違反の原因となっています。

あなたが書いた場合:

*tmp = 0;

おそらくセグメンテーション違反も発生するでしょう。

于 2012-06-08T00:11:09.253 に答える