为什么这会导致访问冲突崩溃到0xcccccc ...?

Mic*_*eal 0 c++ iostream

我有一段随机的代码,用于从CSV文件中读取...并且它很好......直到大约2000次读取...然后getline行失败,访问违规到0xcccccc ...我认为这意味着输入流(文件)已被清除...不是我知道为什么:)

int CCSVManager::ReadCSVLine ( fstream * fsInputFile,
                               vector <string> * recordData )
{
    string s;

    getline ( *fsInputFile, s );
    stringstream iss( s );

    for ( unsigned int i = 0; i < getNumFields (); i++ )
    {
        getline ( iss, s, ',' );
        (*recordData)[i] = s;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

Tyl*_*nry 5

std::vector当你像这样的数组一样访问它时,它不会重新分配自己扩展.你应该做什么而不是

(*recordData)[i] = s;
Run Code Online (Sandbox Code Playgroud)

recordData->push_back(s);
Run Code Online (Sandbox Code Playgroud)

这将根据需要扩展矢量.两种方法之间的一个重要区别是第一种方法总是从向量的第一个元素开始写入.第二个将开始附加到向量的末尾,如果向量最初不为空,则向量不同.