我的代码中遇到了内存泄漏问题。我相信它来自stdin。我试图关闭(0),没有工作。以下是我的代码
char line[MAX_BUFFER] = {};
char *commands;
while(!feof(stdin)) {
fputs("? ",stdout);
if(fgets(line, MAX_BUFFER , stdin))
{
Command cmd = {};
commands = parse(&cmd, line);
printf("%s",commands);
free(commands);
}
}
return 0;
我的parse.c基本上就是这样做
char result[250] = "some text string here";
char *target = malloc(sizeof(char) * 250);
target = strdup(result);
return target
我的valgrind输出看起来像这个
==26303== FILE DESCRIPTORS: 3 open at exit.
==26303== Open file descriptor 2: /dev/pts/4
==26303== <inherited from parent>
==26303==
==26303== Open file descriptor 1: /dev/pts/4
==26303== <inherited from parent>
==26303==
==26303== Open file descriptor 0: /dev/pts/4
==26303== <inherited from parent>
==26303==
==26303==
==26303== HEAP SUMMARY:
==26303== in use at exit: 500 bytes in 2 blocks
==26303== total heap usage: 4 allocs, 2 frees, 545 bytes allocated
==26303==
==26303== 500 bytes in 2 blocks are definitely lost in loss record 1 of 1
答案 0 :(得分:0)
strdup()和malloc()都在分配内存!您可以删除parse.c中的第二行并编辑第三行以说明
char * target = strdup(result);
它会正常工作。
使用免费(pointerToMemoryAllocated)
后,不要忘记释放内存