2
我正在使用Qt框架在C++中开发应用程序,但我需要读取.xslx文件才能将其导入到sqlite数据库中。我正在使用Qt Xlsx模块,但是我发现一些困难,因为我的程序在执行期间的某个随机点崩溃。该文件大约有1500行和10列。我能够读取700和1000行之间,但然后崩溃。我认为这是一个内存问题,但我无法使用Valgrind,因为我在Mac OS X系统上。 我的代码的相关部分如下。使用C++ Qt和Qt Xlsx模块读取“Large”xlsx文件
void Controller::ImportDatabase(const QString &filepath)
{
QStringList* person_fields = new QStringList;
QXlsx::Document *xlsx_database = new QXlsx::Document(filepath);
int number_of_row = xlsx_database->dimension().lastRow();
int number_of_column = xlsx_database->dimension().lastColumn();
for (int row = 2; row <= number_of_row; ++row) {
++count;
qDebug() << "count: " << count;
for(int column = 0; column < number_of_column ; ++column) {
if ((QXlsx::Cell *cell = xlsx_database->cellAt(row, column))) {
person_fields->append(cell->value().toString());
delete cell;
}
}
qDebug() << "NOME: " << person_fields->at(0);
//Create a new Person and pass its pointer around: all commented anyway
person_fields->clear();
delete cell;
}
delete person_fields;
delete xlsx_database;
}
任何意见或建议将不胜感激。
您是否尝试过最基本和最直接的方法?获取Qt和XLSX模块的调试版本,然后在调试器中运行它并查看崩溃的位置。 –
1.我认为没有必要在堆上构建person_fields和xlsx_database,堆栈应该足够了。 2.你真的需要从cellAt中删除单元格指针吗?在循环中还有另一个“删除单元格”,看不到这个编译过程是怎样的... 3. person_fields-> at(0);如果没有添加到QStringList中,可能会导致问题。4. Kuba Ober说:调试! – CppChris