0

私はこのC関数を持っています。

void execMessage(int sockfd,void *structCHARMS, ClientData *client)
{
    ClientData *client_recv = (ClientData *) structCHARMS;

    client->local_addr=client_recv->local_addr;
    client->mode = client_recv->mode;

    char*msg;   
    CharmsMsg chmsg = {charms_msg_map[XTypes_CONFIG_PARAM].msg_code, client, 1184};
    msg = encode(&chmsg, "0.01");
    ssize_t n = 0;
    n = send(sockfd,msg,strlen(msg), 0);

}

これは、TCP クライアントに接続された従来の TCP サーバーのメイン関数から呼び出されます。メッセージを作成し(特定の関数エンコードを使用)、これをサーバーに送信します。

問題は、この関数を同じファイルにmain()挿入すると正しく機能しますが、これを別のファイルに挿入すると、プログラムの実行中に「セグメンテーション エラー フォールト」が発生することです。

誰でも私を助けることができますか?ありがとう

4

1 に答える 1

0

前に述べたように、プログラムがセグメンテーション違反を起こしている場所を正確に把握する必要があります。ここで、ローカルの char* を作成し、ポインターのアドレスをエンコード関数に渡します。その機能のコードはありますか? 関数からポインターを返し、その中でエンコードされた c-string ヒープを返したいと思うように思えます。送信した後、メモリの割り当てを解除して、リークが発生しないようにする必要があります。

于 2013-09-18T17:56:55.120 に答える