1

您有任何理论如何调试这种可能有问题的内存访问模式吗?我有预感它可能与我正在经历的某个海森错误有关,但我似乎无法确定它。

这是在 valgrind 下运行的调试构建的片段,带有--track-origins=yes,--leak-check=full

我怎么会滥用 Qt 的 Gui lib,以便它以下列方式表现出来?

==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== 
4

1 回答 1

0

检查您在 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 下运行时,许多库会引发很多令人担忧的错误。

于 2012-09-26T22:24:30.400 回答