Ошибка сегментации с элементом QList

В моем приложении у меня есть список указателей на объекты 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;
}

После этой функции в QList добавляются указатели QFile. Но когда я пытаюсь манипулировать чем-то в элементе списка, получая его с помощью функции at(int), возникает ошибка сегментации.

Пример:

QFile * file = files.at(index);
std::cout << "File size = " << file->fileName() << std::endl;

Кто-то видит, что я делаю неправильно?


person vanz    schedule 08.04.2013    source источник
comment
Вы пробовали использовать отладчик?   -  person    schedule 08.04.2013
comment
Разве вы не добавляете адрес локальной переменной в вектор?   -  person Adri C.S.    schedule 08.04.2013
comment
Ответ @metalhead решает мою проблему   -  person vanz    schedule 10.04.2013


Ответы (1)


Объекты, которые вы поместили в свой список файлов, вышли за рамки и были уничтожены. Вместо этого используйте оператор «новый», чтобы выделить их. Обязательно удалите их, когда закончите, иначе будет утечка памяти.

    QFile* file = new QFile(QDir::toNativeSeparators(path));
    if(file->exists()){
        files.append(file);
    }
person metalhead    schedule 08.04.2013