将新项目插入向量时,程序崩溃

时间:2012-02-27 15:36:47

标签: c++ vector

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

在第二次循环之后,程序崩溃并显示以下消息:

  

“cpi.exe中0x776315de处的未处理异常: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 个答案:

答案 0 :(得分:2)

您应该直接流入整数。如果你必须阅读“令牌”,那么使用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 );
}

答案 1 :(得分:0)

尝试

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