私は怒鳴る機能を書いたように、サーバーからのメッセージ応答を受信したい:エラーのmalloc():メモリ破損
char * receive_response(SSL *ssl, BIO *outbio) {
int bytes;
int received = 0;
char *resp;
resp = (char *) malloc(4096*sizeof(char));
bytes = SSL_read(ssl, resp, 4096);
resp[strlen(resp)] = '\0';
if (bytes < 0) {
BIO_printf(outbio, "\nError reading...\n");
exit(1);
}
received += bytes;
BIO_printf(outbio, "Received...%d bytes\n", received);
BIO_printf(outbio, "%s", resp);
BIO_printf(outbio, "Receive DONE\n");
return resp;
}
をしかし、私はエラーを取得:私はそれを実行すると、メモリの破損:malloc関数を()。 奇妙なことは、メインで2回目にこの関数を呼び出すと発生します。最初は大丈夫です。それを理解するのを助けてください。
'memsetの( resp、0、sizeof(resp)); '間違っています...' sizeof(resp) 'はあなたが割り当てたブロックのサイズではなくポインタのサイズです。また、 'strlen()'はヌルターミネータを使用して文字列の終わりを判断します。ヌルがまだ追加されていない場合は使用できません。 – Dmitri
申し訳ありませんが、最初に配列としてrespを宣言するときに使用します。私はそれを削除しました。そして、strlen()、ありがとう、私の間違い。しかし、まだエラーが発生します。 – thanhdx
は[バイト] = '\ 0'(あなたが4096まで読めば、4097バイト)をNULL終端のための余分なバイトを割り当て、そして 'RESPを使用;'代わりRESP 'の[strlenを(それぞれ)] = '\ 0' ; '(' bytes'が> = 0であることを確認した後)。 'strlen()'はヌルターミネータがどこにいなくても正しく動作しないため、 'strlen()'を使ってヌルターミネータをどこに置くかを理解するのはエラーです。また、いつバッファを解放しますか? – Dmitri