开发使用的是qt2.3.7
系统是linux
由于系统功能繁多,所以使用了大量弹出控件。
这个问题过于诡异,现将现象描述如下:
QLabel* OutputPannel_2;
QFrame* Frame13_2;
QPushButton* SumOutput;
//OutputForm * outPutSetFre1;
Channelsetting *outPutSetFre1;
Channelsetting *outPutSetFre2;
//Channelsetting *outPutSetFre3;
//Channelsetting *outPutSetEle;
//Channelsetting *outPutSetSwi;
FrequencyRangeSetting * freSet;
DrawPoints *drawPoints;
Data *data;
int paintTimer;
bool _switch;
transfer * ptTransfer;
int type;
int type2;
这里是.h中的部分声明,其中的第七,八,九行是注掉的,程序编译后可以在板子上运行
第二次运行时将第七行声明注释去掉,将程序编译后下到板子上,程序崩溃。
现在的声明就为:
QLabel* OutputPannel_2;
QFrame* Frame13_2;
QPushButton* SumOutput;
//OutputForm * outPutSetFre1;
Channelsetting *outPutSetFre1;
Channelsetting *outPutSetFre2;
Channelsetting *outPutSetFre3;
//Channelsetting *outPutSetEle;
//Channelsetting *outPutSetSwi;
FrequencyRangeSetting * freSet;
DrawPoints *drawPoints;
Data *data;
int paintTimer;
bool _switch;
transfer * ptTransfer;
int type;
int type2;
并且无论增加的是第七行,还是把第七行注释掉重新加入别的声明,比如加入int temp;这类的声明依旧会崩溃,而且确定是不加不崩溃,一加就崩溃。难道是声明也有上限?
第三次运行时,将第七行声明重新写下,形式如下:
QLabel* OutputPannel_2;
QFrame* Frame13_2;
QPushButton* SumOutput;
//OutputForm * outPutSetFre1;
Channelsetting *outPutSetFre1;
Channelsetting *outPutSetFre2;
//Channelsetting *outPutSetEle;
//Channelsetting *outPutSetSwi;
FrequencyRangeSetting * freSet;
DrawPoints *drawPoints;
Data *data;
int paintTimer;
bool _switch;
transfer * ptTransfer;
int type;
int type2;
public:
Channelsetting *outPutSetFre3;
原有的所有声明其实都是在public下的,这么做无非是增加了一个public的声明,此时编译过的程序就能在板子上跑起来。
所做的实验都只是在声明处进行了更改,并没有涉及到信号槽以及函数调用,并且崩溃的初始化测试也成功,为所有的控件申请空间地址也是成功的,即程序崩溃和本身初始化无关,无非是增加了声明,所以问下
懂的牛人,到底是什么机制导致这种事情的发生?