2010-12-10 65 views
6

虽然在valgrind中搜索仍然可以找到,但有人说这不是问题。我们不需要解决它。有些人说它需要修复。如果有人能够明确地告诉我这个问题背后的逻辑是什么,那么我会更好。解决这个问题是强制性的吗?仍然可以在valgrind

[编辑]

我有以下Valgrind的输出,我的C program.Do我需要解决?

 LEAK SUMMARY: 
     ==27333== definitely lost: 0 bytes in 0 blocks. 
     ==27333==  possibly lost: 0 bytes in 0 blocks. 
     ==27333== still reachable: 96 bytes in 12 blocks. 
     ==27333==   suppressed: 0 bytes in 0 blocks. 
+0

如果这是一个C或C++程序,你甚至没有说过。 – sharptooth 2010-12-10 07:08:37

回答

9

这取决于。 “仍可到达”意味着您在退出之前没有取消分配一块内存,但有一个指向它的指针。

在一个C++程序中,这意味着某个对象可能不是delete d,因此它的析构函数可能没有运行,因此说有些数据可能没有保存到磁盘上,例如某些其他操作可能不会采取,因此你的程序可能会产生意想不到的行为

但是在C程序中没有析构函数,所以你的程序就不能依赖它。同样,释放内存需要一些时间,所以通过在退出时不释放内存,您可以节省一些时间 - 您的程序将更快地退出(这对于具有大量数据的程序可能很重要)。

因此,如果你的C程序“仍然可以访问”阻止它不是问题,但这表明程序中的某些代码没有释放内存,因此在重用该代码时可能会出现错误。

相关问题