将垃圾放入数组的C ++函数

时间:2014-04-21 14:22:37

标签: c++

使用此函数时,一切正常,直到添加,它将内存地址插入数组而不是新的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;
    }

1 个答案:

答案 0 :(得分:2)

validateSeat(row, '10');是个错误。 '10'将是一个多字节字符常量,我确定这不是你想要的。

更新:这应该是validateSeat(row, 10),而validateSeat(seat, 3)之后的行。

reservation[noPassengers]name[noPassengers]可能超出了您分配的内存量的范围,我们无法根据您显示的代码进行分析。

在调用此函数之前,请更新您的帖子以显示为reservationname分配内存的位置。 (显示代码,不要描述代码)。

相关问题