当前位置:编程学习 > wap >>

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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,