1

每当我在valgrind中加载任何基于 GTK+ 的应用程序时,它都会报告大量内存泄漏。那是怎么回事?GTK+ 有问题吗?

4

1 回答 1

3

GTK+ 和 GLib 不会释放“分配一次”内存。他们遵循这样一种范式,即在进程退出之前释放资源是不必要的,无论如何都会被系统释放(这主要适用于内存)。这当然对调试不太友好,但可以稍微加快程序终止并简化代码(这是 C,即使“微不足道”的任务也需要一行代码)。

因此,“仍然可以访问”的内存很可能只是没有有意释放,而不是泄漏。或者,当然,可能是一个错误。然而,“绝对丢失”的记忆几乎可以肯定是一个错误。

另请注意,程序的内存泄漏错误看起来好像是由 GTK+ 本身触发的。例如,GTK+ 可能会分配一个对象,以便稍后由程序取消引用(和释放),但它没有这样做。Valgrind 将在 GTK+ 中显示堆栈跟踪,尽管程序中存在错误。

于 2010-05-21T15:31:26.157 回答