内存从C中的stdin泄漏

时间:2018-05-25 14:27:36

标签: c

我的代码中遇到了内存泄漏问题。我相信它来自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

1 个答案:

答案 0 :(得分:0)

strdup()和malloc()都在分配内存!您可以删除parse.c中的第二行并编辑第三行以说明

char * target = strdup(result);

它会正常工作。

使用免费(pointerToMemoryAllocated)

后,不要忘记释放内存