每当我在 valgrind 中加载任何GTK +动力应用程序时,它都会报告大量内存泄漏。那是怎么回事?是GTK +车吗?
答案 0 :(得分:3)
GTK +和GLib不释放“分配一次”内存。他们遵循这样的范例,即在进程退出之前不必释放资源,无论如何系统将释放资源(这主要适用于内存)。这当然不是对调试友好,但允许加速程序终止并简化代码(这是C,即使是“微不足道的”任务也需要代码行。)
所以,“仍然可以访问”的内存很可能只是没有故意释放,而不是泄密。或者,当然,可能是一个错误。然而,“绝对丢失”的记忆几乎肯定是一个错误。
另请注意,程序的内存泄漏错误看起来好像是由GTK +本身触发的。例如,GTK +可能会在以后由程序分配一个要被解除引用(和释放)的对象,但这样做不会。尽管程序中存在错误,Valgrind仍将在GTK +中显示堆栈跟踪。