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

点击界面中的一个button程序就崩溃了

问题是这样的,我做了个界面,里面有opt,GA,close三个button,分别连接了三个函数,但是我按opt按钮后程序直接崩溃,其它两个按钮都不会。部分代码如下

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;
}



由于没法进行断点调试,我在每个连接函数的开头都加上了printf的输出用来实验是否连接成功,但是没有显示出来,是不是意味着程序在点击button是就奔溃了。
debug截图如下 --------------------编程问答-------------------- 在那槽函数里面打个断点,调试一下看哪里挂的。 --------------------编程问答-------------------- 没法断点调试啊,按调试就直接跑出来了 --------------------编程问答--------------------     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);
这么多open连个if都没有。 --------------------编程问答-------------------- 为什么需要加if?我要连续打开这几个文件赋值给不同的数组.并没有条件判断啊。 --------------------编程问答-------------------- 是不是delete那几个数组有问题呢,使用数组的对象是不是在你delete的时候还在使用? --------------------编程问答-------------------- 应该不是这个,我一开始的代码这几个数组不是用指针的,而是直接用静态数组,还是会崩掉,我为了验证是不是这几个数组越界了才把它们改为指针定义的 --------------------编程问答--------------------
引用 4 楼 archertake 的回复:
为什么需要加if?我要连续打开这几个文件赋值给不同的数组.并没有条件判断啊。

你不加if,怎么知道文件一定是打开成功了,读文件一定Ok? --------------------编程问答--------------------
引用 7 楼 jdwx1 的回复:
Quote: 引用 4 楼 archertake 的回复:

为什么需要加if?我要连续打开这几个文件赋值给不同的数组.并没有条件判断啊。

你不加if,怎么知道文件一定是打开成功了,读文件一定Ok?

已经在每个打开文件语句中加上判断了
Data=fopen("../coils/auto/KData", "r");
        if(Data==NULL)
        {
            printf("%d",11);
        }
          else
        {
              reply=fread(K1, 8, 10000, Data);
              fclose(Data);
          }

Data=fopen("../coils/auto/EData", "r");
          if(Data==NULL)
        {
            printf("%d",12);
        }
        else
        {
            reply=fread(K2, 8, 10000, Data);
            fclose(Data);
        }
Data=fopen("../coils/auto/R_Rectify", "r");
        if(Data==NULL)
        {
            printf("%d",13);
        }
        else
        {
            reply=fread(R_Rectify, 8, 5600, Data);
            fclose(Data);
        }
Data=fopen("../coils/auto/L_Rectify", "r");
        if(Data==NULL)
        {
            printf("%d",14);
        }
        else
        {
            reply=fread(L_Rectify, 8, 5600, Data);
        fclose(Data);
        }
点击运行没有还是崩掉,没有出现输出提示,应该不是这个问题。 --------------------编程问答--------------------
引用 7 楼 jdwx1 的回复:
Quote: 引用 4 楼 archertake 的回复:

为什么需要加if?我要连续打开这几个文件赋值给不同的数组.并没有条件判断啊。

你不加if,怎么知道文件一定是打开成功了,读文件一定Ok?

我把判断在改了一下
Data=fopen("../coils/auto/KData", "r");
        if(Data==NULL)
        {
            printf("11:\n");
        }
          else
        { printf("dakaichenggong:\n");
              reply=fread(K1, 8, 10000, Data);
              fclose(Data);
          }

Data=fopen("../coils/auto/EData", "r");
          if(Data==NULL)
        {
              printf("12:\n");
        }
        else
          { printf("dakaichenggong:\n");
            reply=fread(K2, 8, 10000, Data);
            fclose(Data);
        }
Data=fopen("../coils/auto/R_Rectify", "r");
        if(Data==NULL)
        {
            printf("13:\n");
        }
        else
        { printf("dakaichenggong:\n");
            reply=fread(R_Rectify, 8, 5600, Data);
            fclose(Data);
        }
Data=fopen("../coils/auto/L_Rectify", "r");
        if(Data==NULL)
        {
            printf("14:\n");
        }
        else
        { printf("dakaichenggong:\n");
            reply=fread(L_Rectify, 8, 5600, Data);
        fclose(Data);
        }
要是文件打开了它应该也会有输出,可是什么都没有,直接崩掉了。所以我想应该是连函数都没进去就出错了吧 --------------------编程问答-------------------- 有点长!最好的办法是把你的slot函数先把内容注注释掉,只打印一句话,然后逐步缩小范围。个人觉得你用错accept函数了,这个函数麻烦放到函数的末尾去。 --------------------编程问答-------------------- 比如:
void DialogWhole::Optimize_Power()
{    
    qDebug("(%s,%d), here in slots function", __FILE__, __LINE__ );
    accept();
}
--------------------编程问答--------------------
引用 11 楼 foxyz 的回复:
比如:
void DialogWhole::Optimize_Power()
{    
    qDebug("(%s,%d), here in slots function", __FILE__, __LINE__ );
    accept();
}
我按你的方法一步步缩小范围了,最后发现是这几个函数出问题了
 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);
qDebug("(%s,%d), here in slots function2", __FILE__, __LINE__ );

这三个函数这边都有问题,但是它们本身没问题,我专门写了个c++的main函数来调用这几个函数,是没有问题的。
这三个函数的定义如下
void OptimizePowerCoil( coil* coilA, coil* coilB, int numseg, int nwinc, int nhinci,
                       double* K1, double* K2, double* L_Rectify, double* R_Rectify);
void ZeroCouple(const coil* coilB, coil* coilD, int numseg, int nwinc, int nhinc, 
            double* K1, double* K2, double* L_Rectify, double* R_Rectify);
void OptimizeSITR(const coil* coilA, const coil* coilB,  coil* coilC, const coil* coilD, int numseg, int nwinc, int nhinc,
                  double* K1, double* K2, double* L_Rectify, double* R_Rectify);

我在工程目录下也将这几个函数所在的头文件目录包含进去了。
--------------------编程问答-------------------- 是不是又是老毛病,手工clear(makefile什么的也要删除),要是影子编译直接把build目录删除,再编译。 --------------------编程问答--------------------
引用 12 楼 archertake 的回复:
Quote: 引用 11 楼 foxyz 的回复:

比如:
void DialogWhole::Optimize_Power()
{    
    qDebug("(%s,%d), here in slots function", __FILE__, __LINE__ );
    accept();
}
我按你的方法一步步缩小范围了,最后发现是这几个函数出问题了
 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);
qDebug("(%s,%d), here in slots function2", __FILE__, __LINE__ );

这三个函数这边都有问题,但是它们本身没问题,我专门写了个c++的main函数来调用这几个函数,是没有问题的。
这三个函数的定义如下
void OptimizePowerCoil( coil* coilA, coil* coilB, int numseg, int nwinc, int nhinci,
                       double* K1, double* K2, double* L_Rectify, double* R_Rectify);
void ZeroCouple(const coil* coilB, coil* coilD, int numseg, int nwinc, int nhinc, 
            double* K1, double* K2, double* L_Rectify, double* R_Rectify);
void OptimizeSITR(const coil* coilA, const coil* coilB,  coil* coilC, const coil* coilD, int numseg, int nwinc, int nhinc,
                  double* K1, double* K2, double* L_Rectify, double* R_Rectify);

我在工程目录下也将这几个函数所在的头文件目录包含进去了。


函数本身也许没有问题,但是这么多指针,你为何不在这些函数的实现中和调用的地方去检查一下每个指针是否有效呢?这个应该比较容易找到的。 --------------------编程问答--------------------     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};

这个有点诡异啊!!
你这个到底是类还是数组啊?
如果是类 你的coilB,coilA这么实现就很诡异了 --------------------编程问答-------------------- 如果是数组麻烦这么写:
 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}; --------------------编程问答--------------------
引用 16 楼 foxyz 的回复:
如果是数组麻烦这么写:
 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};

这个不是数组,这个是我定义的一个结构体,定义如下:
typedef struct coil
{
    double rout; //out radius of coil
    double w; //conduct width of a coil
    double s; //conduct space of a coil (usually 6mil)
    double h; //conduct thickness (usually 1.37mil in common PCB technology)
    int N; // number of turns of a coil
    double x,y,z; //posistion of a coil
    double angle; //angle of coil with horizontal plane
}coil;
--------------------编程问答--------------------
引用 13 楼 jdwx1 的回复:
是不是又是老毛病,手工clear(makefile什么的也要删除),要是影子编译直接把build目录删除,再编译。
我是在linux终端上直接make的,每次make之前都会clear一遍。好像没什么问题 --------------------编程问答--------------------
引用 14 楼 foxyz 的回复:
Quote: 引用 12 楼 archertake 的回复:

Quote: 引用 11 楼 foxyz 的回复:

比如:
void DialogWhole::Optimize_Power()
{    
    qDebug("(%s,%d), here in slots function", __FILE__, __LINE__ );
    accept();
}
我按你的方法一步步缩小范围了,最后发现是这几个函数出问题了
 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);
qDebug("(%s,%d), here in slots function2", __FILE__, __LINE__ );

这三个函数这边都有问题,但是它们本身没问题,我专门写了个c++的main函数来调用这几个函数,是没有问题的。
这三个函数的定义如下
void OptimizePowerCoil( coil* coilA, coil* coilB, int numseg, int nwinc, int nhinci,
                       double* K1, double* K2, double* L_Rectify, double* R_Rectify);
void ZeroCouple(const coil* coilB, coil* coilD, int numseg, int nwinc, int nhinc, 
            double* K1, double* K2, double* L_Rectify, double* R_Rectify);
void OptimizeSITR(const coil* coilA, const coil* coilB,  coil* coilC, const coil* coilD, int numseg, int nwinc, int nhinc,
                  double* K1, double* K2, double* L_Rectify, double* R_Rectify);

我在工程目录下也将这几个函数所在的头文件目录包含进去了。


函数本身也许没有问题,但是这么多指针,你为何不在这些函数的实现中和调用的地方去检查一下每个指针是否有效呢?这个应该比较容易找到的。
我在调用函数之前加上这些判断
    c1=&coilA;
    c2=&coilB;
    if(c1==NULL)
    {
        qDebug("(%s,%d), coilAwrong", __FILE__, __LINE__ );
    }
    else
       printf("A meiwenti:\n");
    if(c2==NULL)
    {
        qDebug("(%s,%d), coilBwrong", __FILE__, __LINE__ );
    }
     else
         printf("B meiwenti:\n");
    if(K1==NULL)
    {
        qDebug("(%s,%d), K1wrong", __FILE__, __LINE__ );
    }
    else
        printf("K1meiwenti:\n");
    if(K2==NULL)
    {
        qDebug("(%s,%d), K2wrong", __FILE__, __LINE__ );
    }
    else
        printf("K2meiwenti:\n");
    if(L_Rectify==NULL)
    {
        qDebug("(%s,%d), LBwrong", __FILE__, __LINE__ );
    }
    else
        printf("Lmeiwenti:\n");
    if(R_Rectify==NULL)
    {
        qDebug("(%s,%d), Rwrong", __FILE__, __LINE__ );
    }
    else
        printf("rmeiwenti:\n");
   
 OptimizePowerCoil(&coilA,&coilB , 25, 4, 1,K1, K2,L_Rectify,R_Rectify);
运行后都有相应的指针有效的输出。然后在Optimizepowercoil函数里面将原来的代码注释掉,加上输出
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include "auto_coil.h"
#include "auto_ReadOutput.h"
#include "auto_SimuFunc.h"
#include "auto_power.h"

void OptimizePowerCoil( coil* coilA, coil* coilB, int numseg, int nwinc, int nhinc,
                       double* K1, double* K2, double* L_Rectify, double* R_Rectify)
{
    printf("wo jinlaile ");
    // define frequency
    double freq_d = 13560000; //power frequency
    double freq_p = 1000000;  //data frequency

    // variables
    double fi;
    double fi_min = 0.2;
    double fi_max = 0.8;
    int Nmax,Nmin,num_N;
    int i, j, k;
    double eff=0, eff1, eff2;
    double start, end;
     printf("nihao:\n ");
return;}

直接编译运行点击opt按钮后还是崩掉,并且没有该函数里的输出。我想是没进去就崩掉了吧。还有我的这个函数是在别的文件夹下的。具体如下。
有一部分h文件是在另外的文件夹下,这个函数就是在这些h文件中定义的。但是我在makefile文件中都已经把这些文件加入了,而且我另外一个按钮Ga中实现的功能也有用到这个文件夹下定义的函数都能运行。我不懂这个有没有影响
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,