我对访问导致的分段错误有一些问题
到Qt应用程序中的成员变量。我的分割经验
故障通常表明它们是访问内存的结果
超出界限的位置。不过,我很难搞清楚
为什么我的代码中会出现这种情况。
该类是QFrame的一个子类,包含许多
成员变量,包括一个最初称为
m_Zoom
类型
unsigned int
. 创建框架时,会调用许多函数
这将设置缩放级别,然后绘制窗口。这个
一切正常。然后,缩放级别可以通过多种方式
更改:打开新文件或按+或-。上面写着
现有的缩放级别,然后决定是否改变它。简单地
读取现有缩放级别会导致分割错误。
注意,这个变量不是指针、数组或任何东西
不寻常。定义大致如下:
class MyClass : public QFrame
{
Q_OBJECT
public:
MyClass(QWidget *parent = 0);
void SetZoomLevel(unsigned int zoom);
void ZoomIn();
protected:
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void paintEvent(QPaintEvent *event);
private:
// A number of private functions for performing calculations
// Some variables including:
double m_OriginShift;
unsigned int m_Zoom;
// Some more variables
};
功能
paintEvent
以及所有
mouse*
事件函数访问
m_缩放
这些工作正常(鼠标用来移动视图
在附近)。构造函数调用
SetZoomLevel
(基本上
m_Zoom = zoom
). 同样,这也没有问题。
ZoomIn
开始
使用:
void MyClass::ZoomIn()
{
qDebug() << "Zoom In";
unsigned int existingZoom = m_Zoom; // [1]
qDebug() << "Existing zoom is " << existingZoom;
...
分割错误发生在这个函数中,在第二个
qDebug
报告任何事情。
我试着在cygwin的gdb中单步执行这个应用程序
标记的行
[1]
和类型
stepi
马上找个断层。
移动了变量(以防其他东西被覆盖
它的位置),改为使用指针
malloc
d存储器,移动
它进入一个单独的结构,将其移动到一个单独的类中(既有一个成员实例,也有一个成员指针
new
构造器中的行)和
可能还有其他一些随机的不成功的绝望行为,我
完全没有主意了。
有人能给我推荐一些调试的好方法吗
这个问题?
我在Windows XP上使用Qt 4.6.3编译GNU Make 3.81和g++
版本4.4.0(来自Qt安装程序附带的mingw)。