그래서 나는 울부 짖는 기능을 썼다 :오류의 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에를(). 이상한 일은 main에서 두 번째 시간에이 함수를 호출 할 때 발생합니다. 처음 엔 괜찮아. 이해해주세요.
'memset 함수 (resof, 0, sizeof (resp));'잘못되었습니다 ... sizeof (resp)'는 할당 한 블록의 크기가 아니라 포인터의 크기입니다 ... 중요하지 않을 수도 있습니다. 또한,'strlen()'은 널 종결자를 사용하여 문자열의 끝이 어디인지를 결정하므로 null이 아직 추가되지 않은 경우에는 사용할 수 없습니다. – Dmitri
죄송합니다. 먼저 resp를 배열로 선언 할 때 사용합니다. 나는 그것을 삭제했다. 그리고, strlen(), 고마워, 내 실수. 그러나 오류가 여전히 발생합니다. – thanhdx
널 터미네이터 (4096 바이트까지 읽으면 4097 바이트)에 여분의 바이트를 할당하고'resp [strlen (resp)] = '\ 0'대신'resp [bytes] = '\ 0'; ' ;'('bytes'가> = 0인지 확인한 후에). 'strlen()'을 사용하면 null 종결자를 어디에 넣을 지 알아내는 것은 에러입니다. 왜냐하면'null '종결자가 아직 없다면'strlen()'이 제대로 작동하지 않을 것이기 때문입니다. 또한 버퍼를 언제 비우습니까? – Dmitri