内存泄漏 C -Valgrind
Memory leak C -Valgrind
我的主函数看起来像这样,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;
}
缺乏一致的缩进使得这本书很难读,但我会试一试。
每次调用 getline 并且 word 为 NULL 时,它都会分配一个数组。如果第二个 while 恰好循环两次,我看不到单词在哪里被释放。当您再次使单词为 NULL 并对其进行 getline mallocs 时,这可能会吓坏 valgrind。
我的主函数看起来像这样,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;
}
缺乏一致的缩进使得这本书很难读,但我会试一试。
每次调用 getline 并且 word 为 NULL 时,它都会分配一个数组。如果第二个 while 恰好循环两次,我看不到单词在哪里被释放。当您再次使单词为 NULL 并对其进行 getline mallocs 时,这可能会吓坏 valgrind。