void CMainFrame::OnComputedatum() 
{
if (!IsDone)
{
AfxMessageBox("请先读取数据!");
}
else
{
//m1.Calculation_N();
if (m1.Calculation_N()==0)
{
return;
} char str1[]={"Result5.txt"};
char str2[50]; m1.OutputDatum(str1); sprintf(str2,"notepad.exe %s",str1);
WinExec(str2,SW_SHOW);  

}

}函数执行到if (m1.Calculation_N()==0)后,由于子函数里有判断,返回false,程序运行也没什么问题,就是退出关闭时听到一声很熟悉的“轰!”,却见不到任何出错对话框,这是怎么回事啊?

解决方案 »

  1.   

    改成debug模式也见不到任何出错对话框?
      

  2.   

    好像是在析构函数里我用了delete,把new生成的变量全delete了,我把它们注销掉就没这个声音了,不知道这样行不行?
      

  3.   

    new和delete的,并且要包含变量定义
      

  4.   

    CMeasure::CMeasure()
    {}CMeasure::~CMeasure()
    { delete []sss1;
    delete []sss2; delete []ID1;
    delete []ID2;
    delete []PAN;
    delete []D1;
    delete []D2;
    delete []id1;
    delete []id2;

    }
    BOOL CMeasure::InputDatum(char *FileName)
    {
    N1 = 0; ifstream fin1;
    fin1.open(FileName,ios::in);
    while(!(fin1.eof()))
    {
    char ss[500];
    fin1.getline(ss,sizeof(ss));
    N1++; }
    fin1.close();
    Ns1 = N1;
    sss1 = new char*[N1]; fin1.open(FileName,ios::in);
    for(int i=0;i<N1;i++)
    {
    char *temp = new char[500];
    fin1.getline(temp,500);
    sss1[i] = temp;

    }
    fin1.close();


    ID1 = new int[N1];
    ID2 = new int[N1];
    PAN = new char*[N1];
    D1 = new double[N1];
    did = new bool[N1];

    //先取值
    for(i=0;i<N1;i++)
    {
    char *temp = new char[50];

    char ss1[100];
    char ss2[100];
    char ss3[100];
    char ss4[100];
    // char ss5[100];
    char ss6[100];
    char ss7[100];
    char ss8[100];
    char ss9[100];
    char ss10[100];
    char ss11[100];

    sscanf(sss1[i],"%s%s%s%s%s%s%s%s%s%s%s",ss1,ss2,ss3,ss4,temp,ss6,ss7,ss8,ss9,ss10,ss11);
    sscanf(ss1,"测站%d",&ID1[i]);
    sscanf(ss3,"测站%d",&ID2[i]);
    sscanf(ss7,"%d",&tp1);
    sscanf(ss9,"%lf",&D1[i]);
    sscanf(ss11,"%lf",&tp2);

    PAN[i] = temp;
    did[i] = false;
    }
    return TRUE;
    }BOOL CMeasure::Calculation()
    { N2 = int(floor(N1/2));
    sss2 = new char*[N2]; id1 = new int[N2];
    id2 = new int[N2];
    D2=new double[N2];
    ……………………
    }
      

  5.   

    ss1到ss10
    都不是NEW生成(不在堆生成)的~
    你在析构函数删除它会出错~因为他是在局部函数结束后(栈中)删除了//delete []sss1; 
    //delete []sss2; 
      

  6.   

    应该是你的某些变量还没定义(申请)就删除~出警告声你的InputDatum(char *FileName)已经执行了吧?你应该先在初始化函数中先将所有要动态申请的变量赋于NULL值先
      

  7.   

    对,InputDatum(char *FileName)是先执行的
    哪么如何赋予NULL值呀?
      

  8.   

    构造函数中将指针初始化为NULL,析构函数中判断指针不是NULL再删除。
      

  9.   

    CMeasure::~CMeasure() 

    if(sss1!=NULL)
    delete []sss1; 
    if(sss2!=NULL)
    delete []sss2; ... } 
      

  10.   

    关于赋值NULL在初始化涵数中~oninitialdialog()中

    CMeasure::CMeasure() 

    sss1=NULL;
    sss2=NULL;
    ...
    }