【问题标题】:Memory leak C -Valgrind内存泄漏 C -Valgrind
【发布时间】:2020-03-31 22:29:42
【问题描述】:

我的 main 函数看起来像这样,Valgrind 在第二个 getline 上向我抛出了内存泄漏。我有两个 while 周期。第一个结束是通过键入 ENTER 和第二个通过 EOF。省略的功能应该对问题没有影响。可能是什么问题?我有两次getline

    while (1) 
    {   
        phrases = NULL;
        size = 0;

        charactersCnt = getline (&phrases, &size, stdin);

        if ( (int) charactersCnt < 1)
        {
             free(phrases);
             free(fraze);
             return 0;
        }

        ...

        if ( phrases[0] == '\n')
        {
            break;
        }
     } 
     while (1) 
     {
         word = NULL;
         size = 0;

         if ((i = getline (&word, &size, stdin)) == EOF)
             break;

         sscanf (word, "%[^\n]s",word);
         int c = 0;
         ...
    }

    for(int i = 0; i < countSt; i++ ){
        free(lines[i].fraze);
    }

    free(lines);
    free(phrases);
    free(word);

    return 0;
}

【问题讨论】:

    标签: c memory memory-management memory-leaks valgrind


    【解决方案1】:

    缺乏一致的缩进使这本书读起来很难,但我会尝试一下。

    每次调用 getline 并且 word 为 NULL 时,它都会分配一个数组。如果第二个 while 恰好循环两次,我看不到单词在哪里被释放。当你再次将 word 设为 NULL 并且 getline mallocs 对此可能会吓坏 valgrind。

    【讨论】:

      猜你喜欢
      • 2016-03-15
      • 1970-01-01
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      • 2013-06-24
      • 2019-07-02
      • 2021-11-28
      • 2020-06-23
      相关资源
      最近更新 更多