сбой программы при вставке новых элементов в вектор - PullRequest
0 голосов
/ 27 февраля 2012
vector<Flight> flights;
while (!myReadFile.eof()) {
    flights.push_back(*(new Flight()));
// read some info...
}  

после второго цикла программа вылетает с сообщением:

«Необработанное исключение в 0x776315de в cpi.exe: 0xC0000005: расположение чтения нарушения доступа 0xfeeefee2.»

Как мне решить проблему?

редактировать:

vector<Flight> flights;
while (!myReadFile.eof()) {
    flights.push_back(Flight());
// read some info...
}

Я попробовал это и все еще сбой во втором цикле

редактировать: полное время

    int count = 0;
    myReadFile >> output;
    while (!myReadFile.eof()) {
        flights.push_back(Flight());
        flights[count].setFlightNum(atoi(output));

        myReadFile >> output;
        int x = atoi(output);
        flights[count].setStartX(x);
        myReadFile >> output;
        int y = atoi(output);
        flights[count].setStartY(y);

        count++;
        myReadFile >> output;
    }

Ответы [ 2 ]

2 голосов
/ 27 февраля 2012

Вы должны потоком напрямую в целые. Если вам нужно прочитать «токены», тогда используйте std :: string, но чтение в массив char всегда опасно.

Вероятно, у вас также должен быть код, который создаст объект Flight из потока, хотя мне не нравится использование std::istream& operator>>(std::istream&, Flight& ), я считаю его "навязчивым" и нерасширяемым. Я предпочитаю фабрики для этого. Однако давайте все равно напишем эту функцию:

std::istream& operator>>(std::istream& is, Flight& flight )
{
    int flightnum, x, y;
    if( is >> flightnum >> x >> y )
    {
       flight.setFlightNum( flightnum );
       flight.setStartX( x );
       flight.setStartY( y );
    }
    return is;
}

А теперь:

std::vector< Flight > vec;

while( myReadFile )
{
    Flight flight;
    if( myReadFile >> flight )
       vec.push_back( flight );
}
0 голосов
/ 27 февраля 2012

Попробуйте

vector<Flight> flights;
while (!myReadFile.eof()) {
  flights.push_back(Flight());
  // read some info...
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...