c - Valgrind 报告 SDL2 的内存泄漏
问题描述
这是我第一次使用 vlagrind,我想知道这些错误是不是很严重,我应该担心或忽略它们。我的程序只是简单的 SDL2 2D 空间游戏,我不知道这些内存泄漏可能来自哪里。
==9173== Conditional jump or move depends on uninitialised value(s)
==9173== at 0xA0E1343: ??? (in /usr/lib/x86_64-linux-gnu/libLLVM-10.so.1)
==9173== by 0xA0215E7: llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (in /usr/lib/x86_64-linux-gnu/libLLVM-10.so.1)
==9173== by 0x9E8BD75: llvm::FPPassManager::runOnFunction(llvm::Function&) (in /usr/lib/x86_64-linux-gnu/libLLVM-10.so.1)
==9173== by 0x9E8BFF2: llvm::FPPassManager::runOnModule(llvm::Module&) (in /usr/lib/x86_64-linux-gnu/libLLVM-10.so.1)
==9173== by 0x9E8C49F: llvm::legacy::PassManagerImpl::run(llvm::Module&) (in /usr/lib/x86_64-linux-gnu/libLLVM-10.so.1)
==9173== by 0xAFD7B34: llvm::MCJIT::emitObject(llvm::Module*) (in /usr/lib/x86_64-linux-gnu/libLLVM-10.so.1)
==9173== by 0xAFD7F1D: llvm::MCJIT::generateCodeForModule(llvm::Module*) (in /usr/lib/x86_64-linux-gnu/libLLVM-10.so.1)
==9173== by 0xAFD86AD: llvm::MCJIT::finalizeObject() (in /usr/lib/x86_64-linux-gnu/libLLVM-10.so.1)
==9173== by 0xAF9C87F: LLVMGetPointerToGlobal (in /usr/lib/x86_64-linux-gnu/libLLVM-10.so.1)
==9173== by 0x84B0041: ??? (in /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so)
==9173== by 0x84A49EF: ??? (in /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so)
==9173== by 0x8490937: ??? (in /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so)
这里提到了一些内存泄漏。但是我已经多次检查我的代码是否有泄漏,我认为它一定在 SDL 库中。
17 bytes in 1 blocks are definitely lost in loss record 10 of 1,977
==9173== at 0x483B7F3: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9173== by 0x4EC85A6: _XlcDefaultMapModifiers (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
==9173== by 0x4EC897A: XSetLocaleModifiers (in /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0)
==9173== by 0x4923824: ??? (in /home/coder/Desktop/game/libSDL2-2.0.so.0)
==9173== by 0x492A45A: ??? (in /home/coder/Desktop/game/libSDL2-2.0.so.0)
==9173== by 0x48FCF6A: ??? (in /home/coder/Desktop/game/libSDL2-2.0.so.0)
==9173== by 0x486C8E6: ??? (in /home/coder/Desktop/game/libSDL2-2.0.so.0)
==9173== by 0x10972A: main (projekt.c:115)
==9173==
==9173== 112 (56 direct, 56 indirect) bytes in 1 blocks are definitely lost in loss record 1,922 of 1,977
==9173== at 0x483DD99: calloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==9173== by 0x880D07E: ???
==9173== by 0x8488C3B: ???
==9173== by 0x84737A5: ???
==9173== by 0x847386C: ???
==9173== by 0x8474479: ???
==9173== by 0x8437A33: ???
==9173== by 0x843A35C: ???
==9173== by 0x84352BC: ???
==9173== by 0x83F8357: ???
==9173== by 0x841C33D: ???
==9173== by 0x8419C76: ???
==9173==
==9173== LEAK SUMMARY:
==9173== definitely lost: 73 bytes in 2 blocks
==9173== indirectly lost: 56 bytes in 1 blocks
==9173== possibly lost: 0 bytes in 0 blocks
==9173== still reachable: 330,333 bytes in 2,678 blocks
==9173== suppressed: 0 bytes in 0 blocks
有人可以解释一下这些错误是什么意思吗?
解决方案
不幸的是,这种库总会有一些漏洞。您可以查看这篇文章以获取更多详细信息或在 SDL / OpenGL / 任何您想要的图形库上找到更多答案,但长话短说,它几乎总是会发生。您应该关注的所有泄漏都是追溯到您自己编写的代码的泄漏。
我建议启动valgrind --leak-check=full --show-reachable=yes
而不是仅仅启动valgrind
,它会更准确地显示您的错误。
推荐阅读
- ios - 从(英语到阿拉伯语)更改语言时如何从左到右更改 SWRaveal 侧菜单表单
- tabs - 即使在 Visual Studio 2017 中取消注释后,如何保持制表符缩进?
- python - 如何在 python 代码脚本中编码密码?
- python - 即使我事先设置了随机状态,为什么我的 cross_val_score 总是不同?
- database - 如何建模或查询关系代数中不存在的东西
- python - 如何以 Pythonic 方式将多个列表分组为单个列表?
- javascript - amp 页面停止工作。无法加载 cdn.ampproject.org 资源
- database - 如何将本地数据库数据与远程数据库同步?
- css - 可能的错误:stroke-linecap="round" 在动画时在 Firefox 中变形
- graphdb - GraphDB 8.9 查询监控:nsTotalSpentInNext 未显示