2

だから、私は自分のクラスの地図を作ろうとしています.「NewYork----250km------LosAngeles」のような道をたどるかどうかを確認するためにネストされたループを実装しようと練習していました. NewYork を以前の都市名として、LosAngeles を次の都市名として指定できます。距離は250km。都市名、道路、都市のメモリを取得していますが、「next_city」の部分をキーボードから入力した後、segfault が発生します。誰かが私が間違っていることを助けてくれますか?

typedef struct road road;
typedef struct city city;

struct city{
    int visited;
    int distance;
    int path;
    char *city_name;

};

struct road{
    int km;
    struct city *next_city, *previous_city;
};

int main()
{  

    char *a=malloc(sizeof(char)*10);
    char *b=malloc(sizeof(char)*10);

    city *NewYork = malloc(sizeof(city));
    NewYork->city_name = fgets(a,10,stdin); //this gives no error

    road *ROAD = malloc(sizeof(road));
    city *next_city = malloc(sizeof(city)); //to see if I can get a memory for LosAngeles

    ROAD->next_city->city_name = fgets(b,10,stdin); //but here it gives a segfault after I type the name to terminal..

}
4

1 に答える 1

3

これROAD->next_cityは、有効なアドレスを指していないためです。これはダングリング ポインターです。

次のことを試してください。

road *ROAD = malloc(sizeof(road));
city *next_city = malloc(sizeof(city));
ROAD->next_city = next_city; 

これはもともとあなたが意図したことですか?

freeまた、経由で取得したメモリを使用する必要があることに注意してくださいmalloc

于 2012-06-05T21:05:08.623 に答える