Russian Qt Forum
Ноябрь 26, 2024, 14:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: SIGSEGV.  (Прочитано 2745 раз)
chadushkind
Гость
« : Август 09, 2013, 21:17 »

Использую Qt Creator. Есть класс, в нем следующая функция:

Код:
bool MainWindow::ReadLines()
{
    QFile file(this->filename);
    if(file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        this->ArrayOfStrings.clear();
        QTextStream in(&file);
        for(int i = 0; i < this->ArrayOfStrings.size(); i++)
        {
            this->ArrayOfStrings[i] = in.readLine();
        }
        file.close();
        return true;
    }
    file.close();
    return false;
}

QList<QString> ArrayOfStrings. Ошибку выдает на этой строке:
Код:
            this->ArrayOfStrings[i] = in.readLine();
Не знаю, в чем проблема. Читал темы по этому поводу, юзал поиск по форуму и гуглил. Ничего не помогло в решении.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Август 09, 2013, 21:34 »

в ArrayOfStrings 0 элементов, поэтому обращение по индексу вызывает ошибку. добавляй считанную строку например через this->ArrayOfStrings += in.readLine();
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
VPS
Гость
« Ответ #2 : Август 09, 2013, 21:47 »

Вроде, как в цикл "for" программа не должна заходить, т.к. перед этим список очищается и количество элементов будет нулевым...
« Последнее редактирование: Август 09, 2013, 21:50 от vps » Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Август 09, 2013, 21:56 »

Вот именно что список пуст, а вы хотите к его элементам обратиться )
При очищении списка будут удалены все элементы, потому, чтобы не ловить ошибок, в цикле добавляйте в список Улыбающийся

И кст, QList<QString> можно заменить на QStringList - тоже самое, но нагляднее Улыбающийся

и это:
Код:
this->ArrayOfStrings.clear();
QTextStream in(&file);
for(int i = 0; i < this->ArrayOfStrings.size(); i++)
{
this->ArrayOfStrings[i] = in.readLine();
}

попробуйте заменить на:
Код:
// код не проверял - нет с собой компилятора, но должно работать
this->ArrayOfStrings.clear();
QTextStream in(&file);
ArrayOfStrings = in.readAll().split("\n");

Глядишь не придется и цикл использовать Улыбающийся
« Последнее редактирование: Август 09, 2013, 22:04 от gil9red » Записан

chadushkind
Гость
« Ответ #4 : Август 09, 2013, 22:17 »

Спасибо всем больше за ответы! Последний вариант заработал, ура!)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.