尝试显示窗口时出现 Qt 错误分段错误
Posted
技术标签:
【中文标题】尝试显示窗口时出现 Qt 错误分段错误【英文标题】:Qt Error segmentation fault when trying to show window 【发布时间】:2012-11-15 20:47:24 【问题描述】:我有一个类 ClientWindow。我已经创建了它的几个实例并将它们的指针附加到一个列表中。但是,如果我尝试显示任何窗口,则会收到“分段错误(核心转储)”,我将窗口列表保存在一个名为控制器的类中。
这是我的控制器头文件:
#ifndef CONTROLLER_H
#define CONTROLLER_H
#include "clientwindow.h"
class Controller
public:
Controller();
void createClients(int num);
void showWindows();
private:
QList<ClientWindow*> clWList;
int size;
;
#endif // CONTROLLER_H
这是cpp文件:
#include "controller.h"
Controller::Controller()
void Controller::createClients(int num)
size = num;
for(int i = 0; i < size; i++)
ClientWindow cw;
clWList.append(&cw);
void Controller::showWindows()
for(int i = 0; i < size; i++)
ClientWindow* cw = clWList.at(0);
cw->show();
这是我的主要内容:
#include <QtGui/QApplication>
#include "clientwindow.h"
#include "controller.h"
int main(int argc, char *argv[])
QApplication a(argc, argv);
// ClientWindow w;
// w.show();
QString temp = argv[1];
bool ok;
int tempI = temp.toInt(&ok, 10);
Controller c;
c.createClients(tempI);
c.showWindows();
return a.exec();
【问题讨论】:
【参考方案1】:这是出错的地方:
for(int i = 0; i < size; i++)
ClientWindow cw;
clWList.append(&cw);
每次迭代都会在堆栈上创建一个局部变量 cw。它在每次迭代结束时被释放。意味着数据消失了。所以你最终会存储指向垃圾的指针。
调用垃圾的成员函数通常会导致崩溃。 :) 改为这样做:
for(int i = 0; i < size; i++)
ClientWindow * cw = new ClientWindow();
clWList.append(cw);
您必须在完成后浏览列表并删除对象。
【讨论】:
以上是关于尝试显示窗口时出现 Qt 错误分段错误的主要内容,如果未能解决你的问题,请参考以下文章