0

建物サーバーとクライアントプログラムを構築しています。私はそれらがソケットを介して通信できるようにしようとしています (32 ビット OS Linux で書いていて、クライアントとサーバーの両方が同じシステムで実行されることが重要な場合)。今、私は次の構造体を持っています:

struct config_line {
    char name[MAX_WORD];   //1 byte
    int  time;             //4 bytes
};

struct config {
    struct config_line *lines; // 4 bytes, points to a struct of 8 bytes
    int count;                 // 4 bytes
};

configData は次のように定義されます

struct config configData; // global

その configData を次のように送信します。

send (clients [scn], &configData, sizeof (configData), 0)

さて、クライアントプログラム内で、アクセスしようとすると

configData.lines[configIndex].name

その行でセグメンテーション違反が発生します。誰にも理由がありますか?

4

1 に答える 1

1

type を送信すると、 のポインターconfig用のスペースがありますが、そのポインターが指す場所に動的に割り当てられた (私が推測する) 配列にはデータが含まれていません。config_line

次に、クライアントはconfig型を取得しますが、配列が送信されず、ポインターがその配列に設定されていないため、(クライアント上で) 無効なポインター値を持ちます。(ポインターは送信側では有効ですが、クライアントでは有効ではありません。別のメモリ空間を使用します)

config保存したい要素の最大数を含むことができる固定サイズの配列を指定するか(送信にはそのデータが含まれます)、動的配列の内容を送信してクライアント側で解析する必要があります。configその配列へのポインターを設定して、逆参照が有効になるようにします

于 2012-04-09T20:21:38.383 に答える