Russian Qt Forum

Qt => Вопросы новичков => Тема начата: HirurG. от Декабрь 20, 2011, 17:25



Название: [РЕШЕНО] Неадекватное поведение QTextStream
Отправлено: HirurG. от Декабрь 20, 2011, 17:25
Здравствуйте! Я столкнулся с проблемой, которая выносит мне мозг весь сегодняшний день ???
есть фрагмент кода:
Код:
QFile policy("policy.txt");
policy.open(QIODevice::WriteOnly);
QTextStream out(&policy);
for(int i = 0; i < n; i++)
    for(int j = 0; j < m; j++)
        out << AccesMatrix[i][j] + "\n";
policy.close();
здесь файл заполняется из таблицы и всё было бы хорошо, НО после выполнения строки
Код:
policy.close();
программа должна выходить из функции, а вместо этого отладчик перескакивает на
Код:
QTextStream out(&policy);
, потом на
Код:
QFile policy("policy.txt");
и так далее до ошибки
Цитировать
Приложение остановлено, так как оно получило сигнал от операционной системы.
Сигнал:
SIGSEGV
Назначение:
Segmentation fault
мне кажется что я что-то не так делаю с QTextStream :( помогите пожалуйста


Название: Re: Неадекватное поведение QTextStream
Отправлено: kambala от Декабрь 20, 2011, 17:46
может этот участок кода вызывается несколько раз откуда-то? сам код выглядит корректно.


Название: Re: Неадекватное поведение QTextStream
Отправлено: HirurG. от Декабрь 20, 2011, 17:53
Цитировать
может этот участок кода вызывается несколько раз откуда-то? сам код выглядит корректно.
во-первых: тогда бы функция выполнялась сначала, а она перескакивает именно на строчку
Код:
QTextStream out(&policy);
и во-вторых: пошаговая отладка идёт по коду вверх ??? причём не по всем строкам подряд


Название: Re: Неадекватное поведение QTextStream
Отправлено: kambala от Декабрь 20, 2011, 18:13
может второй поток?..

выложи минимальный компилируемый проект с проявляющейся ошибкой. вот такой код работает без проблем:
Код
C++ (Qt)
#include <QApplication>
#include <QTextStream>
#include <QFile>
 
int main(int argc, char **argv)
{
   QApplication a(argc, argv);
 
   QFile f("a.txt");
   if (!f.open(QIODevice::WriteOnly))
   {
       qFatal("file wasn't created");
   }
   QTextStream s(&f);
   for (int i = 0; i < 4; i++)
       for (int j = 0; j < 5; j++)
           s << (i + j + i * j) << "\n";
   f.close();
 
   return a.exec();
}
 


Название: Re: Неадекватное поведение QTextStream
Отправлено: HirurG. от Декабрь 20, 2011, 18:34
проблема решилась неожиданно. ошибка возникала из-за того, что выше по коду при заполнении был пропущен один элемент массива. после обнаружения и исправления ошибки программа перестала "вылетать". а отладчик, который вместо завершения "ползёт" по коду вверх скорее всего совершает какие-то неведомые мне операции с памятью, но работает всё отлично  :)
kambala, спасибо за поддержку ;)