0

次のコードでエラーが発生しています。実行するたびにセグメンテーション違反が発生します。

bool handshake() {
    node recv;
    void *ptr = recv;
    recverror = recvfrom(sock,(void*) recv, sizeof((void *) recv), 0, (struct sockaddr*)&from, &len);
    cout << recv.data; 
    return true;
}

ノードの構造は次のとおりです。

struct node {
    char *data;
    int size_data;
    int dest_port;
    int src_port;
    int flag;
    double checksum;
    int seq;
    int ack;
    int windowsize;
    node* next;
    node() {next = NULL;}
};
4

2 に答える 2

2

コードにはいくつかの大きな問題があります。

まず、 の割り当てptrが正しくありません。次のようにする必要があります。

void *ptr = &recv;

コードから型の不一致に関するコンパイラ エラーが発生しているはずです。

次に、あなたの引数recvfromは間違っています:

recverror = recvfrom(sock, ptr, sizeof(recv), 0, (struct sockaddr*)&from, &len);

構造体をポインターに変換することはできません。構造体のアドレスを渡したいのです。

char*最後に、最も重要なこととして、ネットワークを介して渡される構造体にメンバーを含めることは意味がありません。ポインターは単一のプロセス内でのみ意味を持ち、プロセス間またはマシン間でポインターを渡すことはできません。データを送信する前に、データをシリアル化する必要があります。

于 2012-11-24T15:55:29.080 に答える
0

void *ptr = recv間違っている。代わりにvoid *ptr = &recv.

于 2012-11-24T15:53:08.167 に答える