2013-04-08 3 views
0

В моем приложении у меня есть список указатель на объекты QFile:вина Сегментация с элементом QList

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; 

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

+0

Вы пробовали использовать отладчик? – 2013-04-08 16:07:47

+1

Не добавляете ли вы адрес локального var в вектор? –

+0

Ответ @metalhead решает мою проблему – vanz

ответ

2

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

QFile* file = new QFile(QDir::toNativeSeparators(path)); 
    if(file->exists()){ 
     files.append(file); 
    } 
+0

Yeap, это решит мою проблему – vanz