I have a function which adds a character to a string:
void AddChToString(char **str,char ch){
int len=(*str)?strlen(*str):0;
(*str)=realloc(*str, len+2);
(*str)[len]=ch;
(*str)[len+1]='\0';
}
Instruments (on the mac) and Valgrind are indicating that the line: (*str)=realloc(*str, len+2) is leaking memory. Is this an implementation issue with realloc? Or am I using it improperly?
Here is the output from Valgrind:
==39230== 6 bytes in 1 blocks are definitely lost in loss record 1 of 7
==39230== at 0x100018B2D: realloc (vg_replace_malloc.c:525)
==39230== by 0x100002259: AddChToString (in ./OpenOtter)
==39230== by 0x10000477B: QueryMapFromString (in ./OpenOtter)
==39230== by 0x100684CD2: ???
==39230== by 0x100001FB0: RequestHandler (in ./OpenOtter)
==39230== by 0x100065535: _pthread_start (in /usr/lib/libSystem.B.dylib)
==39230== by 0x1000653E8: thread_start (in /usr/lib/libSystem.B.dylib)
==39230==
==39230== 9 bytes in 1 blocks are definitely lost in loss record 2 of 7
==39230== at 0x100018B2D: realloc (vg_replace_malloc.c:525)
==39230== by 0x100002259: AddChToString (in ./OpenOtter)
==39230== by 0x10000298E: ParseHTTPRequest (in ./OpenOtter)
==39230== by 0x100004151: OpenRoutesFile (in ./OpenOtter)
==39230== by 0x10000142B: main (in ./OpenOtter)
==39230==
==39230== 45 bytes in 5 blocks are definitely lost in loss record 3 of 7
==39230== at 0x100018B2D: realloc (vg_replace_malloc.c:525)
==39230== by 0x100002259: AddChToString (in ./OpenOtter)
==39230== by 0x10000298E: ParseHTTPRequest (in ./OpenOtter)
==39230== by 0x100001EB4: RequestHandler (in ./OpenOtter)
==39230== by 0x100065535: _pthread_start (in /usr/lib/libSystem.B.dylib)
==39230== by 0x1000653E8: thread_start (in /usr/lib/libSystem.B.dylib)
==39230==
==39230== LEAK SUMMARY:
==39230== definitely lost: 60 bytes in 7 blocks
==39230== indirectly lost: 0 bytes in 0 blocks
==39230== possibly lost: 0 bytes in 0 blocks
==39230== still reachable: 1,440 bytes in 4 blocks
==39230== suppressed: 0 bytes in 0 blocks
Thanks.