簡體   English   中英

為什么Valgrind不喜歡我對glutCreateWindow的用法?

[英]Why does Valgrind not like my usage of glutCreateWindow?

我正在使用以下代碼...

169: const char *title = Title.c_str();
170: glutCreateWindow(title);

瓦爾格朗德給我以下...

==28841== Conditional jump or move depends on uninitialised value(s)
==28841==    at 0x6FF7A4C: (within /usr/lib64/libGLcore.so.180.44)
==28841==    by 0x6FF81F7: (within /usr/lib64/libGLcore.so.180.44)
==28841==    by 0x7289B36: (within /usr/lib64/libGLcore.so.180.44)
==28841==    by 0x728A757: _nv000133gl (in /usr/lib64/libGLcore.so.180.44)
==28841==    by 0x4EAB9E9: (within /usr/lib64/libGL.so.180.44)
==28841==    by 0x4EAEA81: (within /usr/lib64/libGL.so.180.44)
==28841==    by 0x4EB1D81: (within /usr/lib64/libGL.so.180.44)
==28841==    by 0x4EA782B: glXCreateNewContext (in /usr/lib64/libGL.so.180.44)
==28841==    by 0x54DF9AA: fgOpenWindow (in /usr/lib64/libglut.so.3.8.0)
==28841==    by 0x54DE062: fgCreateWindow (in /usr/lib64/libglut.so.3.8.0)
==28841==    by 0x54DF300: glutCreateWindow (in /usr/lib64/libglut.so.3.8.0)
==28841==    by 0x4146CE: vimrid::glut::GlutApplication::Init() (GlutApplication.cpp:170)

但是未初始化的是什么? title變量使用Title.c_str()的值初始化,並且Title是在構造函數成員初始化列表中初始化的類成員。

class VimridApplication
{
    // ...

public:
    std::string Title;

    // ...
}

VimridApplication::VimridApplication() :
    Title("Untitled VimridApplication")
{
    // ...
}

class GlutApplication : public VimridApplication
{
    // ...
}

Valgrind帶有一些默認的錯誤抑制功能,但可能不涵蓋libCLcore。

錯誤檢查工具可以檢測到基本庫中的許多問題,例如GNU C庫和X11客戶端庫,它們已預先安裝在GNU / Linux系統上。 您無法輕松地解決這些問題,但是您不想看到這些錯誤(是的,有很多!),因此Valgrind讀取了一系列錯誤以在啟動時消除。 構建系統時,默認的禁止文件由./configure腳本創建。

您可以創建自己的與代碼無關的錯誤抑制

只是忽略這個; 如您所見,未初始化的值在OpenGL庫中代碼的下方使用,並且未初始化的可能不是您的數據。 您可能想對其進行深入研究(它可能仍然是誤報),但您最好不理會它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM