【发布时间】:2011-04-09 19:58:11
【问题描述】:
我正在编写一个非常基本的 SDL 应用程序,但是当我通过 valgrind 运行它时,它报告了几个显然与 SDL 库相关的丢失块(在你问它之前,我确实调用了 SDL_Quit,或者更准确地说,我调用了 @987654321 @)。这是一个例子:
==2525== 192 (16 direct, 176 indirect) bytes in 1 blocks are definitely lost in loss record 107 of 131
==2525== at 0x4C25502: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==2525== by 0x644244A: ??? (in /usr/lib/libX11.so.6.3.0)
==2525== by 0x6442989: ??? (in /usr/lib/libX11.so.6.3.0)
==2525== by 0x64440A2: ??? (in /usr/lib/libX11.so.6.3.0)
==2525== by 0x6444915: _XlcCreateLC (in /usr/lib/libX11.so.6.3.0)
==2525== by 0x6462B5F: _XlcDefaultLoader (in /usr/lib/libX11.so.6.3.0)
==2525== by 0x644C325: _XOpenLC (in /usr/lib/libX11.so.6.3.0)
==2525== by 0x644C467: _XlcCurrentLC (in /usr/lib/libX11.so.6.3.0)
==2525== by 0x644C4BD: XSetLocaleModifiers (in /usr/lib/libX11.so.6.3.0)
==2525== by 0x4E69EED: ??? (in /usr/lib/libSDL-1.2.so.0.11.3)
==2525== by 0x4E6A57F: ??? (in /usr/lib/libSDL-1.2.so.0.11.3)
==2525== by 0x4E59E00: SDL_VideoInit (in /usr/lib/libSDL-1.2.so.0.11.3)
我在 StackOverflow 上搜索了这里,发现了一个类似的问题。答案显然是,在库中分配了一些小缓冲区,作者从不关心释放这些缓冲区。我的问题是,这种方法的动机是什么?为什么分配一些东西然后故意不free()呢?
【问题讨论】:
-
可能是库中的错误?并不是所有的代码都写得很完美。他们很可能不小心忘记释放其中的一些内存,因为它是一个非常大的库。
-
我没有重复评论的意思,但我忘了补充:如果确实是内存泄漏,您可能需要向 SDL 的开发人员报告。然而,Eelke 确实提出了一个有效的观点,即他们可能只是等到最后才真正释放它。
标签: c memory-leaks sdl valgrind