使用此函数时,一切正常,直到添加,它将内存地址插入数组而不是新的int:
bool reserveSeat(string name[], int reservation[][2], int &noPassengers)
{
bool reserve = false;
string searchName;
int row, seat, validRow, validSeat;
cout << "Please enter reservation name: ";
getline(cin, searchName);
cout << "Please enter a Row #: ";
cin >> row;
cout << "Please enter a Seat #: ";
cin >> seat;
cin.ignore(80, '\n');
validRow = validateSeat(row, '10');
validSeat = validateSeat(seat, '3');
for (int ctr = 0; ctr < noPassengers; ctr++) {
if (seat == reservation[ctr][1] && row == reservation[ctr][0]) {
break;
} else {
reserve = true;
noPassengers++;
name[noPassengers] = searchName;
reservation[noPassengers][0] = row;
reservation[noPassengers][1] = seat;
}
}
return reserve;
}
该函数从main()
通过:
if ( reserveSeat(name, reservation, noPassengers) )
cout << "reservation made ";
else
cout << "reservation not made ";
cout << endl;
所有数组的大小均为12,只有4个条目 验证座位功能按要求:
int validateSeat(int& col, int max)
{
while(col>max || col < 0)
{
cout << "Sorry, that is within an invalid range." << endl << "again: ";
cin >> col;
}
return col;
}
noPassengers是根据此处的负载确定的:
int loadArrays(ifstream & fin,string name[],int reservation[][2])
{
int row=0;
for (; row < SIZE ; row++)
{
getline(fin,name[row]);
if (fin.eof())
break;
for (int col=0;col < 2; col++)
{
fin >> reservation[row][col];
}
fin.ignore(80,'\n');
}
return row;
}
答案 0 :(得分:2)
validateSeat(row, '10');
是个错误。 '10'
将是一个多字节字符常量,我确定这不是你想要的。
更新:这应该是validateSeat(row, 10)
,而validateSeat(seat, 3)
之后的行。
reservation[noPassengers]
或name[noPassengers]
可能超出了您分配的内存量的范围,我们无法根据您显示的代码进行分析。
在调用此函数之前,请更新您的帖子以显示为reservation
和name
分配内存的位置。 (显示代码,不要描述代码)。