首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求大侠帮小弟我解决个有关问题

2013-09-28 
求大侠帮我解决个问题运行后就内存冲突,把readfile注释掉就能运行,readfile那个函数有什么错,大家能帮我找

求大侠帮我解决个问题
运行后就内存冲突,把readfile注释掉就能运行,readfile那个函数有什么错,大家能帮我找找吗?
下面是这个函数


void writefile(line &lines){
ofstream f;
Orderman *order;
Orderbill *bill;
replaceman *replace;
int i,j,n;
string file[]={"011.txt","012.txt","021.txt","022.txt","031.txt","032.txt","041.txt","042.txt","051.txt","052.txt"};
f.open("airline.txt");
if(f.fail()){
cout<<"写入文件失败"<<endl;
exit(1);
}
for(i=0;i<lines.length;i++){
f<<lines.headairline[i].destination<<" "<<lines.headairline[i].flightnumber<<" "<<lines.headairline[i].aircraftnumber<<" "<<lines.headairline[i].week<<" ";
f<<lines.headairline[i].crewnumber[1]<<" "<<lines.headairline[i].crewnumber[2]<<" "<<lines.headairline[i].crewnumber[3]<<" ";
f<<lines.headairline[i].remainnumber[1]<<" "<<lines.headairline[i].remainnumber[2]<<" "<<lines.headairline[i].remainnumber[3]<<" ";
for(j=0;j<19;j++)
f<<lines.headairline[i].seat[j]<<" ";
if(i==lines.length-1)
f<<lines.headairline[i].seat[j]<<'#';
else
f<<lines.headairline[i].seat[j]<<endl;
}
f.close();
i=0;n=0;
for(n=0;n<2*lines.length;n++){
f.open(file[n].c_str());           //写入已订票客户信息
if(f.fail()){
cout<<"写入文件失败"<<endl;
exit(1);
}
order=lines.headairline[i].orderhead;
if(order==NULL)
f<<'#';
else{
f<<order->name<<" ";
bill=order->billhead;
while(bill!=NULL){
f<<bill->seatdegree<<" "<<bill->seatnumber;
if(bill->next==NULL)
if(order->next!=NULL)
f<<'$'<<endl;
else
f<<'$';
else
f<<" ";
bill=bill->next;
}
if(order->next=NULL)
f<<'#';
order=order->next;
}
f.close();
n++;
f.open(file[n].c_str());
if(f.fail()){
cout<<"写入文件失败"<<endl;
exit(1);
}
replace=lines.headairline[i].replacehead->front;
if(replace==NULL)
f<<'#';
while(replace!=NULL){
f<<replace->name<<" "<<replace->bill[1]<<" "<<replace->bill[2]<<" "<<replace->bill[3];
if(replace->next==NULL)
f<<'#';
else
f<<endl;
replace=replace->next;
}
f.close();
i++;
}
}









[解决办法]
检查以下2行:
string file[]={"011.txt","012.txt","021.txt","022.txt","031.txt","032.txt","041.txt","042.txt","051.txt","052.txt"};
for(n=0;n<2*j;n++){
file中只有10个文件名。如果前面计算的j>5,将出现数组越界。为防止这种异常,可改为:
for(n=0;n<sizeof(file)/sizeof(string) && n<2*j;n++){
[解决办法]
根据输入文件的数据:
北京 CA5673 RT23 1 5 5 10 5 5 10
最后的10实际是seat数组的下标,而不是seat数组的数据。因此要这样改:

int seat[20]; //座位是否被订,0代表没被订,1代表被订,1~5为1等舱位,6~10为2等舱位,11~20为3等舱位
改为
int seat[21]; //座位是否被订,0代表没被订,1代表被订,1~5为1等舱位,6~10为2等舱位,11~20为3等舱位

    for(int i=0;i<20;i++){ //只有一个数据10, 却要读20个数据,这里出错
      f>>T.seat[i]; 
    }
改为
    for(int i=0;i<21;i++){ //先把seat清0
      T.seat[i] = 0;
    }
    int seat_index;
    f>>seat_index; //读入数据10
    T.seat[seat_index] = 1; //1代表被订
    

热点排行