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;
}
答案 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...
}