尝试显示窗口时出现Qt错误分段错误
我有一个类客户端窗口。我已经创建了几个实例,并将它们的指针附加到列表中。但是,如果我尝试显示任何窗口,我会得到“分段错误(内核转储)”,我会将窗口列表保存在名为controller的类中 这是我的控制器头文件:尝试显示窗口时出现Qt错误分段错误,qt,pointers,qt-creator,qmainwindow,Qt,Pointers,Qt Creator,Qmainwindow,我有一个类客户端窗口。我已经创建了几个实例,并将它们的指针附加到列表中。但是,如果我尝试显示任何窗口,我会得到“分段错误(内核转储)”,我会将窗口列表保存在名为controller的类中 这是我的控制器头文件: #ifndef CONTROLLER_H #define CONTROLLER_H #include "clientwindow.h" class Controller { public: Controller(); void createClients(int nu
#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
\ifndef控制器
#定义控制器
#包括“clientwindow.h”
类控制器
{
公众:
控制器();
void createClients(int num);
void showWindows();
私人:
QList-clWList;
整数大小;
};
#endif//CONTROLLER\u 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();
}
}
#包括“controller.h”
控制器::控制器()
{
}
无效控制器::createClients(int num)
{
大小=个数;
对于(int i=0;ishow();
}
}
这是我的主要观点:
#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();
}
#包括
#包括“clientwindow.h”
#包括“controller.h”
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
//客户端窗口w;
//w.show();
QString temp=argv[1];
布尔ok;
int tempI=温度toInt(&ok,10);
控制器c;
c、 createClients(tempI);
c、 showWindows();
返回a.exec();
}
这就是问题所在:
for(int i = 0; i < size; i++)
{
ClientWindow cw;
clWList.append(&cw);
}
for(int i=0;i
在每次迭代中,在堆栈上创建一个局部变量cw。它在每次迭代结束时解除分配。意味着数据不见了。因此,您最终存储指向垃圾的指针
调用垃圾邮件的成员函数通常会导致崩溃。:)改为这样做:
for(int i = 0; i < size; i++)
{
ClientWindow * cw = new ClientWindow();
clWList.append(cw);
}
for(int i=0;i
处理完这些对象后,您必须浏览列表并删除它们