在我的应用程序中,我有一个指向QFile对象的指针列表:
QList<QFile*> files
此功能添加列表中的元素:
void MumuServer::openFiles(){
QDir fileDir(QDir::toNativeSeparators(homeApp.path() + "/file"));
std::cout << fileDir.path().toStdString() << std::endl;
if(fileDir.exists()){ // there is files directory in the application home dir
std::cout << "fileDir exists" << std::endl;
QStringList filesList = fileDir.entryList();
for(int index = 0; index < filesList.size(); index++){
QString fileName = filesList.at(index);
if(this->blackListFile.contains(fileName)){
continue;
}
QString path = fileDir.path() + "/" + fileName;
std::cout << path.toStdString() << std::endl;
QFile file(QDir::toNativeSeparators(path));
if(file.exists()){
files.append(&file);
}
}
std::cout << this->files.size() << " files found" << std::endl;
}
在此函数之后,QFile指针被添加到QList上。但是,当我尝试操作列表元素上的某些内容时,使用函数at(int)来实现分段错误。
示例:
QFile * file = files.at(index);
std::cout << "File size = " << file->fileName() << std::endl;
有人看到我做错了什么?
答案 0 :(得分:2)
您放入“文件”列表的对象已超出范围并被销毁。使用'new'运算符来代替它们。完成后一定要删除它们,否则会有内存泄漏。
QFile* file = new QFile(QDir::toNativeSeparators(path));
if(file->exists()){
files.append(file);
}