我正在编写一个非常基本的SDL应用程序,但是当我通过valgrind运行它时,它报告了几个显然与SDL库相关的丢失块(在你问它之前,我确实调用了SDL_Quit,或者更准确地说我调用了{{ 1}})。这是一个例子:
atexit(SDL_Quit)
我在这里搜索StackOverflow并发现了一个类似的问题。答案显然,在库中分配了一些小缓冲区,作者从不关心这些缓冲区。我的问题是,这种方法的动机是什么?为什么要分配一些东西,然后故意不==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)
呢?
答案 0 :(得分:1)
如果需要缓冲区直到程序结束,则无需释放它们。当一个程序退出它正在使用的所有内存时,无论如何都会被操作系统释放。如果程序在退出之前打算释放块只会减慢程序的退出速度。