1

これを使用しようとしていますが、valgrind で実行すると、メモリの問題が発生します。

たとえば

char *serialize_file(t_file_package *pack) {

     char *payLoad = malloc(numDigits(pack->file_desc)+numDigits(pack->priority)+strlen(pack->code)+2);
     sprintf(payLoad, "%d#%d#%s", (uint32_t)pack->file_desc,(int16_t)pack->priority, pack->code);
     char *pack = malloc(numDigits(PROCESS) + numDigits((int64_t)strlen(payLoad)) + strlen(payLoad)+2);

     sprintf(pack, "%d#%d#%s",PROCESS, strlen(payLoad), payLoad);
     free(payLoad);
     return pack;
}

私はasprintfの存在を知っていますが、GNU ANSI Cプロジェクトでそれを使用できない理由を知りません...私のEclipseは、その関数が認識されていないと言っています

よろしくお願いします!

4

2 に答える 2

1

末尾の null character を忘れていまし'\0'た。呼び出しの引数にもう 1 バイト追加して(malloc()に置き換えます)、すべて問題ないはずです。+2+3

于 2012-12-09T18:24:06.963 に答える
1

文字列の末尾にヌル文字のスペースを許可していません。文字列には、「file_desc」の数字、「priority」の数字、「code」の文字、2 つの「#」文字、および終端ヌル文字。

malloc の 2 回目の呼び出しでも同じ問題が発生します。

于 2012-12-09T18:24:36.620 に答える