0

在我的应用程序中,我有一个指向 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;

有人看到我做错了什么?

4

1 回答 1

2

您放入“文件”列表的对象已超出范围并被销毁。使用“新”运算符来分配它们。完成后请务必删除它们,否则会出现内存泄漏。

    QFile* file = new QFile(QDir::toNativeSeparators(path));
    if(file->exists()){
        files.append(file);
    }
于 2013-04-08T16:11:58.287 回答