Russian Qt Forum

Qt => Вопросы новичков => Тема начата: chadushkind от Август 09, 2013, 21:17



Название: SIGSEGV.
Отправлено: 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();
Не знаю, в чем проблема. Читал темы по этому поводу, юзал поиск по форуму и гуглил. Ничего не помогло в решении.


Название: Re: SIGSEGV.
Отправлено: kambala от Август 09, 2013, 21:34
в ArrayOfStrings 0 элементов, поэтому обращение по индексу вызывает ошибку. добавляй считанную строку например через this->ArrayOfStrings += in.readLine();


Название: Re: SIGSEGV.
Отправлено: VPS от Август 09, 2013, 21:47
Вроде, как в цикл "for" программа не должна заходить, т.к. перед этим список очищается и количество элементов будет нулевым...


Название: Re: SIGSEGV.
Отправлено: gil9red от Август 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");

Глядишь не придется и цикл использовать :)


Название: Re: SIGSEGV.
Отправлено: chadushkind от Август 09, 2013, 22:17
Спасибо всем больше за ответы! Последний вариант заработал, ура!)