我正在编写一个应用程序,在该应用程序中我从 csv 文件中读取值。每行都被分割,逗号存储在一个向量中。每行有 4 个值。然后我将每个值存储到另一个向量。csv 文件有 5.795.857 行。所以在我的结构中我想存储 4*5.795.857 值。问题是应用程序崩溃了。正如我在调试器中看到的那样,我大约在 405.000 行处崩溃。我知道我的电脑有点旧,但我认为它应该能够存储这么多的值。我在 WindowsXP 32 位上运行 Qt5,我有 1GB 内存。
我是 Qt 和 c++ 编程的新手,但作为 Java 开发人员,当我遇到此类问题时,我会增加堆大小。你认为这是我的问题吗?如果是,我如何增加 Qt5 的堆大小?
这是我读取文件并将其存储在数据结构中的代码
std::vector < std::vector < QString> > Server::loadCsvFile( const char* path )
{
vector <QString> temp;
vector <vector <QString> > dataFlow;
string dataString;
QString row;
ifstream dataFile( path );
int stopCounter = 0;
//while((dataFile.good()) && (stopCounter < 1095))
while (dataFile.good())
{
stopCounter++;
getline( dataFile, dataString );
row = QString::fromStdString( dataString );
//cout << "counter: " << stopCounter << "\n";
QStringList rowList = row.split( "," );
for( int i=0; i < rowList.size(); i++ )
{
temp.push_back( rowList.at(i));
}
dataFlow.push_back( temp );
temp.clear();
rowList.clear();
}
dataFile.close();
dataFlow.pop_back();
return dataFlow;
}
到目前为止,我做了一些更改以查看这解决了我的问题,但没有。这就是我的代码知道的样子:
std::vector < QStringList > Server::loadCsvFile2( const char* path )
{
std::vector < QStringList > dataFlow;
QFile file(path);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
throw std::runtime_error("Can't open the file " +
std::string(path));
QTextStream in(&file);
int counter = 0;
while (!in.atEnd())
{
counter++;
dataFlow.emplace_back(in.readLine().split(","));
cout << counter << "\n";
}
return dataFlow;
}