内存泄漏C -Valgrind

问题描述 投票:-1回答:1

我的主要功能看起来像这样,并且valgrind在第二条getline上抛出内存泄漏。我有两个周期。第一个目标是输入ENTER,第二个目标是输入EOF。省略的功能应该对问题没有影响。可能是什么问题?我有两次热线电话吗?

 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个回答
0
投票

缺乏一致的缩进使得这很难读,但我会刺穿。

每次调用getline且word为NULL时,它都会分配一个数组。如果第二个while恰好循环两次,我看不到单词可以释放的地方。当您再次使单词NULL并为此得到getline mallocs时,可能会使valgrind迷失。

© www.soinside.com 2019 - 2024. All rights reserved.