环境:Win7x64、Qt5.3.2 MSVC2010 OpenGL、vs2010
1、ZC:在 构造函数 中,基类访问子类的成员 会报内存错误,如果访问的是 基本类型的话(如int) 可能还不会出错,如果访问的是 类似 QList<Tbase*>类型的成员的话 就会出错。
本类构造函数 访问 本类的成员或者基类的成员的话,不会出错(∵ 也就是这么做的,如初始化成员变量)
猜想:本类访问子类的 成员变量的时候,可能有些成员变量还未分配好空间??(反正这样做就是不可靠...)
2、测试代码:
#include <QDebug> #include <QMap> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } class TA; class Tbase { public: Tbase(); public: int FiBase; public: QList<Tbase*> FlistBase; void AddBase(Tbase *_p); }; class TA :public Tbase { public: TA():Tbase(){} public: int FiA; void SetA(int _i) {FiA = _i;} public: QList<Tbase*> FlistA; void AddA(Tbase *_p); }; Tbase::Tbase() { ((TA*)this)->FiA = 10; ((TA*)this)->SetA( 50 ); this->AddBase(this); ((TA*)this)->AddA(this); } void Tbase::AddBase(Tbase *_p) { qDebug() << "Tbase::AddBase(..) - 1"; if (-1 == FlistBase.indexOf(_p)) { qDebug() << "Tbase::AddBase(..) - 2"; FlistBase.append(_p); qDebug() << "Tbase::AddBase(..) - 3"; } qDebug() << "Tbase::AddBase(..) - 4"; } void TA::AddA(Tbase* _p) { qDebug() << "TA::AddA(..) - 1"; if (-1 == FlistA.indexOf(_p)) { qDebug() << "TA::AddA(..) - 2"; FlistA.append(_p); qDebug() << "TA::AddA(..) - 3"; } qDebug() << "TA::AddA(..) - 4"; } void MainWindow::on_pushButton_clicked() { TA a;// = new TA; qDebug() << a.FiA; }
3、控制台输出:
Starting E:Z_Qt5Qt532_vs2010uild-Test2-Desktop_Qt_5_3_MSVC2010_OpenGL_32bit-Release eleaseTest2.exe... Tbase::AddBase(..) - 1 Tbase::AddBase(..) - 2 Tbase::AddBase(..) - 3 Tbase::AddBase(..) - 4 TA::AddA(..) - 1 TA::AddA(..) - 2 程序异常结束。 E:Z_Qt5Qt532_vs2010uild-Test2-Desktop_Qt_5_3_MSVC2010_OpenGL_32bit-Release eleaseTest2.exe crashed
4、
5、