Почему Valgrind не нравится мое использование glutCreateWindow? - PullRequest
1 голос
/ 20 апреля 2009

Я использую следующий код ...

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
{
    // ...
}

Ответы [ 2 ]

4 голосов
/ 20 апреля 2009

Valgrind поставляется с некоторым подавлением ошибок по умолчанию, но это, вероятно, не распространяется на libCLcore.

Инструменты проверки ошибок обнаруживают многочисленные проблемы в базовых библиотеках, таких как библиотека GNU C и клиентские библиотеки X11, которые предварительно установлены в вашей системе GNU / Linux. Вы не можете легко исправить это, но вы не хотите видеть эти ошибки (и да, их много!), Поэтому Valgrind читает список ошибок, которые нужно устранить при запуске. Файл подавления по умолчанию создается скриптом ./configure при сборке системы.

Вы можете создать свои собственные средства подавления ошибок , которые, как вы знаете, не имеют отношения к вашему коду.

2 голосов
/ 20 апреля 2009

Просто игнорируй это; как вы можете видеть, неинициализированное значение используется намного ниже вашего кода в библиотеке OpenGL, и, вероятно, не ваши данные неинициализированы. Возможно, вы захотите покопаться в этом (это может все еще быть ложным срабатыванием), но вы могли бы также оставить это в покое.

...