Почему Valgrind не нравится мое использование GluCreateWindow?

StackOverflow https://stackoverflow.com/questions/766303

  •  12-09-2019
  •  | 
  •  

Вопрос

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

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 с атрибуция
Не связан с StackOverflow
scroll top