я пишу функцию, где я манипулировать строку и возвращает строку malloc'd после серии зЬгсру и strcat:Утечка памяти с возвращаемой строки
char * doRequest(char *start, char**headers, char *body)
{
char * reply;
char * com;
int i;
reply = malloc(512 * sizeof(char));
if (!reply)
return SRV_ERR;
strcpy(reply, "Your request ");
com = strtok(start, " ");
strcat(reply, com);
strcat(reply, " with options: ");
for (i = 0; headers[i] != NULL; i = i + 2)
{
strcat(reply, headers[i]);
strcat(reply, ", ");
}
strcat(reply, "has been received.");
strcat(reply, "\0");
return reply;
}
, а затем я освобождаю возвращенный указатель в код вызывающего абонента:
...
char * reply = doRequest(command, headers, body);
int len = strlen(reply);
printf("Return message: %s\n", doRequest(command, headers, body));
if(writen(s, reply, len) != len) printf("Write error while replying\n");
else printf("Request served correctly.\n");
free(reply);
...
Я думаю, что правильно, что свободная память, но Valgrind еще говорит, что эта память не освобождается и, следовательно, теряется. Что не так с этим кодом? Спасибо за помощь!
'printf (" Обратное сообщение:% s \ n ", doRequest (команда, заголовки, тело));' Вы также называете это здесь и не освобождаете эту память. – Joe
Кроме того, этот код будет делать неудобные вещи в момент, когда у вас больше 512 байтов данных, возвращающихся из doRequest. – Joe
Правильно! Большое спасибо! – AndreaV