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,程序运行也没什么问题,就是退出关闭时听到一声很熟悉的“轰!”,却见不到任何出错对话框,这是怎么回事啊?
{
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,程序运行也没什么问题,就是退出关闭时听到一声很熟悉的“轰!”,却见不到任何出错对话框,这是怎么回事啊?
{}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];
……………………
}
都不是NEW生成(不在堆生成)的~
你在析构函数删除它会出错~因为他是在局部函数结束后(栈中)删除了//delete []sss1;
//delete []sss2;
哪么如何赋予NULL值呀?
{
if(sss1!=NULL)
delete []sss1;
if(sss2!=NULL)
delete []sss2; ... }
或
CMeasure::CMeasure()
{
sss1=NULL;
sss2=NULL;
...
}