QT编译通过,运行后出错
上图是debug的截图。主要用到下面这个文件的代码,代码太长,删除了一些头文件。
DialogWhole::DialogWhole(QWidget *parent, MainWindow *parentmainwindow, int flag)
: QDialog(parent)
{
ParentMainwindow = parentmainwindow;
Ok_Button = new QPushButton(tr("Opt"));
GA_Button = new QPushButton(tr("GA"));
Cancel_Button = new QPushButton(tr("Close"));
connect(Cancel_Button, SIGNAL(clicked()), this, SLOT(reject()));
if (flag==0)
{ connect(Ok_Button, SIGNAL(clicked()), this, SLOT(Optimize_Power()));
connect(GA_Button, SIGNAL(clicked()), this, SLOT(Optimize_Power_GA()));
setWindowTitle(tr("Optimize Power Coils"));
resize(300,350);
}
else
{ connect(Ok_Button, SIGNAL(clicked()), this, SLOT(Optimize_Whole()));
connect(GA_Button, SIGNAL(clicked()), this, SLOT(Optimize_Power_GA()));
setWindowTitle(tr("Optimize the Whole System"));
resize(300,400);
}
PCB_Length_Label = new QLabel(tr("Secondary PCB Size (cm) :"));
PCB_Length_Edit = new QLineEdit(tr("1181.1"));
f_p_Label = new QLabel(tr("Power frequency (MHz) :"));
f_p_Edit = new QLineEdit(tr("1.0"));
f_d_Label = new QLabel(tr("Data frequency (MHz) :"));
f_d_Edit = new QLineEdit(tr("13.56"));
Distance_Label = new QLabel(tr("Transmission Distance (cm) :"));
Distance_Edit = new QLineEdit(tr("393.7"));
PCB_Thickness_Label = new QLabel(tr("Thickness of PCB (cm) :"));
PCB_Thickness_Edit = new QLineEdit(tr("63"));
s_Label = new QLabel(tr("s of PCB (mil) :"));
s_Edit = new QLineEdit(tr("6"));
h_Label = new QLabel(tr("h of PCB (cm) :"));
h_Edit = new QLineEdit(tr("1.4"));
w_Label = new QLabel(tr("w of PCB (cm) :"));
w_Edit = new QLineEdit(tr("8"));
progressBar = new QProgressBar;
progressBar->setRange(0, 200);
QGroupBox *Para_GroupBox = new QGroupBox(tr("Parameters"));
QVBoxLayout *ParaLayout = new QVBoxLayout;
ParaLayout->addWidget(f_p_Label);
ParaLayout->addWidget(f_p_Edit);
if (flag!=0)
{ ParaLayout->addWidget(f_d_Label);
ParaLayout->addWidget(f_d_Edit);
}
ParaLayout->addWidget(PCB_Length_Label);
ParaLayout->addWidget(PCB_Length_Edit);
ParaLayout->addWidget(PCB_Thickness_Label);
ParaLayout->addWidget(PCB_Thickness_Edit);
ParaLayout->addWidget(Distance_Label);
ParaLayout->addWidget(Distance_Edit);
ParaLayout->addWidget(s_Label);
ParaLayout->addWidget(s_Edit);
ParaLayout->addWidget(h_Label);
ParaLayout->addWidget(h_Edit);
ParaLayout->addWidget(w_Label);
ParaLayout->addWidget(w_Edit);
Para_GroupBox->setLayout(ParaLayout);
QGroupBox *Pro_GroupBox = new QGroupBox(tr("Optimization Progress"));
QVBoxLayout *ProLayout = new QVBoxLayout;
ProLayout->addWidget(progressBar);
Pro_GroupBox->setLayout(ProLayout);
QDialogButtonBox *btnBox = new QDialogButtonBox(Qt::Horizontal);
btnBox->addButton(Ok_Button, QDialogButtonBox::ActionRole);
btnBox->addButton(GA_Button, QDialogButtonBox::ActionRole);
btnBox->addButton(Cancel_Button, QDialogButtonBox::ActionRole);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(Pro_GroupBox);
mainLayout->addWidget(Para_GroupBox);
mainLayout->addWidget(btnBox);
setLayout(mainLayout);
}
void DialogWhole::startProgress(int i)
{
progressBar->setValue(i);
}
void DialogWhole::Optimize_Power()
{
FILE* Data;
int reply;
double *K1=new double[10000];
double *K2=new double[10000];
double *R_Rectify=new double[5600];
double *L_Rectify=new double[5600];
Data=fopen("../coils/auto/KData", "r");
reply=fread(&K1, 8, 10000, Data);
fclose(Data);
Data=fopen("../coils/auto/EData", "r");
reply=fread(&K2, 8, 10000, Data);
fclose(Data);
Data=fopen("../coils/auto/R_Rectify", "r");
reply=fread(&R_Rectify, 8, 5600, Data);
fclose(Data);
Data=fopen("../coils/auto/L_Rectify", "r");
reply=fread(&L_Rectify, 8, 5600, Data);
fclose(Data);
double freq_p=0, Length=0, Thickness=0, Distance=0;
freq_p = f_p_Edit->text().toDouble()*1e6;
Length = PCB_Length_Edit->text().toDouble();
Thickness = PCB_Thickness_Edit->text().toDouble();
Distance = Distance_Edit->text().toDouble();
coil coilB={0.44365*Length, 8, 6, 1.4, 33, 0, 0, Thickness , 0};
coil coilA={905, 10, 6, 1.4, 50, 0, 0, Thickness+Distance, 0};
coilPair ABpair;
OptimizePowerCoil(&coilA, &coilB, 25, 4, 1, K1, K2, L_Rectify, R_Rectify);
ABpair = ManualCal(&coilA, &coilB, freq_p, K1, K2, L_Rectify, R_Rectify, 0);
OuputOptResult(&coilA, &coilB, &coilA, &coilB,
&ABpair, &ABpair, &ABpair, &ABpair, &ABpair, &ABpair,
"./CoilResults/OptResults", 0);
reply = QMessageBox::information(this, tr("..."), tr("Power Optimization Finished!\n\n"
"Please Click OK to View results.\n"),
QMessageBox::Ok, QMessageBox::Ok);
accept();
ParentMainwindow->loadFile(tr("./CoilResults/OptResults"));
delete [] K1;
delete [] K2;
delete [] R_Rectify;
delete [] L_Rectify;
}
void DialogWhole::Optimize_Power_GA()
{
FILE* Data;
int reply;
double *K1=new double[10000];
double *K2=new double[10000];
double *R_Rectify=new double[5600];
double *L_Rectify=new double[5600];
Data=fopen("../coils/auto/KData", "r");
reply=fread(&K1, 8, 10000, Data);
fclose(Data);
Data=fopen("../coils/auto/EData", "r");
reply=fread(&K2, 8, 10000, Data);
fclose(Data);
Data=fopen("../coils/auto/R_Rectify", "r");
reply=fread(&R_Rectify, 8, 5600, Data);
fclose(Data);
Data=fopen("../coils/auto/L_Rectify", "r");
reply=fread(&L_Rectify, 8, 5600, Data);
fclose(Data);
double freq_p=0, Length=0, Thickness=0, Distance=0,s=6,h=1.4,w=8;
freq_p = f_p_Edit->text().toDouble()*1e6;
Length = PCB_Length_Edit->text().toDouble();
Thickness = PCB_Thickness_Edit->text().toDouble();
Distance = Distance_Edit->text().toDouble();
Distance = s_Edit->text().toDouble();
Distance = h_Edit->text().toDouble();
Distance = w_Edit->text().toDouble();
coil coilB={0.44365*Length, 8, 6, 1.4, 33, 0, 0, Thickness , 0};
coil coilA={905, 10, 6, 1.4, 50, 0, 0, Thickness+Distance, 0};
coilPair ABpair;
genoAlgorithm evo;
srand((unsigned)time(NULL));
randomInit(&evo); //initialize random population
Evaluation(&evo, K1, K2, L_Rectify, R_Rectify,&s,&h,&w); // Evaluate fitness of initial genos
// begin GA
int i=0;
for (i=0; i<200; i++)
{
ManualCalProgressBar(i,200);
progressBar->setValue(i);
FitStatistics(&evo, K1, K2, L_Rectify, R_Rectify);
Duplicate(&evo);
Overcross(&evo, 0.9, K1, K2, L_Rectify, R_Rectify,&s,&h,&w);
Mutation(&evo, 0.01, K1, K2, L_Rectify, R_Rectify);
}
FitStatistics(&evo, K1, K2, L_Rectify, R_Rectify);
Duplicate(&evo);
printf("After GA:\n");
OutputGeno(&evo, "GAResults", K1, K2, L_Rectify, R_Rectify,&s,&h,&w);
reply = QMessageBox::information(this, tr("..."), tr("Power Optimization Finished!\n\n"
"Please Click OK to View results.\n"),
QMessageBox::Ok, QMessageBox::Ok);
accept();
progressBar->setValue(0);
ParentMainwindow->loadFile(tr("./CoilResults/TestingGA"));
delete [] K1;
delete [] K2;
delete [] R_Rectify;
delete [] L_Rectify;
}
void DialogWhole::Optimize_Whole()
{
FILE* Data;
int reply;
double *K1=new double[10000];
double *K2=new double[10000];
double *R_Rectify=new double[5600];
double *L_Rectify=new double[5600];
Data=fopen("../coils/auto/KData", "r");
reply=fread(&K1, 8, 10000, Data);
fclose(Data);
Data=fopen("../coils/auto/EData", "r");
reply=fread(&K2, 8, 10000, Data);
fclose(Data);
Data=fopen("../coils/auto/R_Rectify", "r");
reply=fread(&R_Rectify, 8, 5600, Data);
fclose(Data);
Data=fopen("../coils/auto/L_Rectify", "r");
reply=fread(&L_Rectify, 8, 5600, Data);
fclose(Data);
double freq_p=0, freq_d=0, Length=0, Thickness=0, Distance=0;
freq_p = f_p_Edit->text().toDouble()*1e6;
freq_d = f_d_Edit->text().toDouble()*1e6;
Length = PCB_Length_Edit->text().toDouble();
Thickness = PCB_Thickness_Edit->text().toDouble();
Distance = Distance_Edit->text().toDouble();
coil coilA={905, 10, 6, 1.4, 50, 0, 0, Thickness+Distance, 0};
coil coilB={0.44365*Length, 8, 6, 1.4, 33, 0, 0, Thickness, 0};
coil coilC={0.44365*Length, 8, 6, 1.4, 10, 0, 0, 2*Thickness+Distance, 0};
coil coilD={0.44365*Length, 8, 6, 1.4, 10, 0, 0, 0, 0};
OptimizePowerCoil(&coilA, &coilB, 25, 4, 1, K1, K2, L_Rectify, R_Rectify);
ZeroCouple(&coilB, &coilD, 25, 4, 1, K1, K2, L_Rectify, R_Rectify);
OptimizeSITR(&coilA, &coilB, &coilC, &coilD, 25, 6, 2, K1, K2, L_Rectify, R_Rectify);
coilPair ABpair, CDpair, ADpair, BDpair, ACpair, BCpair;
ABpair = ManualCal(&coilA, &coilB, freq_p, K1, K2, L_Rectify, R_Rectify, 0);
CDpair = ManualCal(&coilC, &coilD, freq_d, K1, K2, L_Rectify, R_Rectify, 0);
ADpair = ManualCal(&coilA, &coilD, freq_p, K1, K2, L_Rectify, R_Rectify, 1);
BDpair = ManualCal(&coilB, &coilD, freq_d, K1, K2, L_Rectify, R_Rectify, 1);
ACpair = ManualCal(&coilA, &coilC, freq_p, K1, K2, L_Rectify, R_Rectify, 1);
BCpair = ManualCal(&coilB, &coilC, freq_p, K1, K2, L_Rectify, R_Rectify, 1);
OuputOptResult(&coilA, &coilB, &coilC, &coilD,
&ABpair, &CDpair, &ADpair, &BDpair, &ACpair, &BCpair,
"./CoilResults/OptResults", 1);
reply = QMessageBox::information(this, tr("..."), tr("Power Optimization Finished!\n\n"
"Please Click OK to View results.\n"),
QMessageBox::Ok, QMessageBox::Ok);
accept();
ParentMainwindow->loadFile(tr("./CoilResults/OptResults"));
delete [] K1;
delete [] K2;
delete [] R_Rectify;
delete [] L_Rectify;
}
不懂为什么debug没法一步步调试,所以找不到到底是哪里出了问题,希望大家给点指点。谢谢了 --------------------编程问答-------------------- 能断点调试吗? --------------------编程问答-------------------- 不行啊,程序点击那个opt按钮就崩溃了不懂为什么 --------------------编程问答-------------------- 此问题好像是用了什么没有初始化的指针去了哦 --------------------编程问答-------------------- 虚拟机使用? --------------------编程问答-------------------- SIGABRT通常是assert断言引起的。你说是点击opt按键时出现的,在问题出现时,查找一下程序运行时的调用栈。
我看你的截图是在DialogWhole中引起的异常,好像是执行fread时候的错误。 --------------------编程问答-------------------- 肯定是信号,槽机制出了问题,
发送出的信号,槽没有了,槽对应的对象销毁了 --------------------编程问答-------------------- 你写的代码太乱,不忍心看,命名不规范,。。。。 --------------------编程问答-------------------- clear,qmake,build,还出错,断点调试。
补充:移动开发 , Qt