Есть ли у вас теория, как отладить этот потенциально проблемный шаблон доступа к памяти? У меня есть предчувствие, что это может быть связано с определенной ошибкой гейзена, которую я испытываю, но я не могу точно определить это.
это фрагмент прогона отладочной сборки под Valgrind, с --track-origins=yes
, --leak-check=full
Как я мог неправильно использовать библиотеку Qt Gui, чтобы она проявлялась следующим образом?
==15169== Conditional jump or move depends on uninitialised value(s)
==15169== at 0x99CD8AA: XSetCommand (in /usr/lib64/libX11.so.6.3.0)
==15169== by 0x99D1FFE: XSetWMProperties (in /usr/lib64/libX11.so.6.3.0)
==15169== by 0x7280853: QWidgetPrivate::create_sys(unsigned long, bool, bool) (in /usr/lib64/qt4/libQtGui.so.4.8.3)
==15169== by 0x723550F: QWidget::create(unsigned long, bool, bool) (in /usr/lib64/qt4/libQtGui.so.4.8.3)
==15169== by 0x723F3E1: QWidget::setVisible(bool) (in /usr/lib64/qt4/libQtGui.so.4.8.3)
==15169== by 0x40DFE5: QWidget::show() (qwidget.h:494)
==15169== by 0x40DA5D: SYSApplication::on_start() (sysapplication.cpp:55)
==15169== by 0x40D5BC: main (main.cpp:8)
==15169== Uninitialised value was created by a stack allocation
==15169== at 0x723F0E0: QWidget::setVisible(bool) (in /usr/lib64/qt4/libQtGui.so.4.8.3)
==15169==
Проверьте переменные, на которые вы ссылаетесь в main.cpp: 8 и sysapplication.cpp: 55. Если вы виноваты, то здесь используется одна из переменных.
Кроме того, проверить Неинициализированное значение было создано выделением стека в QWidget :: setVisible — Вы когда-нибудь вызывали setVisible? Если так, каково значение параметра?
Важное примечание: Valgrind будет отслеживать память, которая копируется вокруг. Если у вас есть:
int i; // 1
int j = i; // 2
int k = j; // 3
if (k) {} // 4
тогда Valgrind выдаст эту ошибку в строке 4, даже если строка 1 является источником ошибки.
Также возможно, что Qt не может что-то инициализировать. Множество библиотек выдают много тревожных ошибок при работе под Valgrind.
Других решений пока нет …