1

静的に割り当てられた文字の配列を使用しようとすると、segfault が発生しますが、memsetを使用して割り当てられた同じ長さの配列では発生しませんmalloc

変数の定義:

    //static
    char inBuff[IN_BUFF_LEN];
    //dynamic
    char * inBuffD;

関数呼び出し:

    //static, cast used because char** != char (*) [n]
    serverInit(portNum, (char**) &inBuff, &serv_addr, &sockfd)
    //dynamic
    serverInit(portNum, &inBuffD, &serv_addr, &sockfd)

関数内で使用します。

    memset(*inBuffAdr, 0, IN_BUFF_LEN);

私の問題は、関数呼び出しの違い、またはより正確には、「char** != char (*) [n]」状況の不完全な理解にあると思われます。しかし、私はあまりにも長い間これを叩いていて、木から森を見ることができないので、ヒントやアドバイスをいただければ幸いです.

4

4 に答える 4

0

serverInit()次のように定義してみませんか。

serverInit(...., char * inBuff, ....)

それからそれを呼び出します

serverInit(...., inBuff, ....)

そして、次のようなserverInit()呼び出しの中でmemset()

memset(inBuff, 0, IN_BUFF_LEN);
于 2012-04-11T16:56:41.807 に答える
0

あなたの混乱の一部は、&inBuff逆参照して get できると考えることにありますinBuff。この簡単なテスト プログラムを実行すると、次のようになります。

#include <stdio.h>
char inBuff[1000];
int main( int argc, char *argv[])
{
    printf( "%p %p\n", inBuff, &inBuff);
    return 0;
}

両方の表記で同じアドレスが出力されていることがわかります。を逆参照しようとする&inBuffと、配列の最初の数バイトがアドレスとして取得されます。

他の人が述べているように、設定するメモリへのポインタを渡すだけです。この回答が将来のデバッグ セッションに役立つことを願っています。

于 2012-04-11T17:25:13.807 に答える