我有一个C代码OpenGL程序,可以在我的ubuntu机器上编译和运行。但是当我在另一个Linux上编译并运行它时会导致分段错误。我已经使用valgrind来查看问题所在,这里只是输出的一小部分:
==21294== LEAK SUMMARY:
==21294== definitely lost: 72 bytes in 1 blocks
==21294== indirectly lost: 0 bytes in 0 blocks
==21294== possibly lost: 0 bytes in 0 blocks
==21294== still reachable: 191,932 bytes in 1,397 blocks
==21294== suppressed: 0 bytes in 0 blocks
==21294==
==21294== ERROR SUMMARY: 8 errors from 3 contexts (suppressed: 0 from 0)
==21294==
==21294== 1 errors in context 1 of 3:
==21294== Syscall param ioctl(generic) points to uninitialised byte(s)
==21294== at 0x5936F07: ioctl (syscall-template.S:84)
==21294== by 0x7C0E0E7: drmIoctl (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==21294== by 0x7C10DDE: drmCommandWriteRead (in /usr/lib/x86_64-linux-gnu/libdrm.so.2.4.0)
==21294== by 0xABF2DA0: nouveau_object_mthd (in /usr/lib/x86_64-linux-gnu/libdrm_nouveau.so.2.0.0)
==21294== by 0xABF3535: nouveau_device_new (in /usr/lib/x86_64-linux-gnu/libdrm_nouveau.so.2.0.0)
==21294== by 0xA0B9690: nouveau_drm_screen_create (in /usr/lib/x86_64-linux-gnu/dri/nouveau_dri.so)
==21294== by 0x9C7FD15: ??? (in /usr/lib/x86_64-linux-gnu/dri/nouveau_dri.so)
==21294== by 0x9F6C59B: ??? (in /usr/lib/x86_64-linux-gnu/dri/nouveau_dri.so)
==21294== by 0x9F67BD2: ??? (in /usr/lib/x86_64-linux-gnu/dri/nouveau_dri.so)
==21294== by 0x4E80AA2: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
==21294== by 0x4E589C3: ??? (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
==21294== by 0x4E53F00: glXQueryVersion (in /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.2.0)
valgrind的完整输出文件长15614行。 我还在学习它,但我可以使用帮助来阅读我正在查看的内容以及如何更正我的代码。这也是我在这个网站上的第一篇文章,所以任何关于这个问题和一般发布的信息都将不胜感激。
答案 0 :(得分:0)
分段错误与内存泄漏无关。要修复分段错误,您应该阅读并修复Valgrind报告的错误,而不是内存泄漏。根据输出,Valgrind发现了8个错误:
==21294== ERROR SUMMARY: 8 errors from 3 contexts (suppressed: 0 from 0)
在此处查看Valgrind错误与内存泄漏之间的区别:
Error summary in Valgrind output?