Russian Qt Forum

Qt => Общие вопросы => Тема начата: Racot от Январь 13, 2012, 18:24



Название: Помогите с QDataStream !!!!
Отправлено: Racot от Январь 13, 2012, 18:24
вот так выглядит упрощённо моя прога:
Цитировать
QDataStream bin_stream;

void fuction_1(void)
{
  QFile bin_file(open_file);
  bin_stream.setDevice(&bin_file);

for(i=0;i<50;i++)
      {
       bin_stream>>data_1;
      
       if(bin_stream.atEnd())
       {
        break;
       }
      }
}

void fuction_2(void)
{
 //Считываем следующую партию байт
        for(i=0;i<50;i++)
        {
         bin_stream>>data_1;
        
         if(bin_stream.atEnd())
         {
          break;
         }
        }
}

Вобщем в function_1 я считываю часть байт из потока, а в function_2 через какое-то время пытаюсь считать еще часть. Но при чтении в function_2  выдаётся ошибка - "приложение остановлено так как получило сигнал от операционной системы".в чём косяк?


Название: Re: Помогите с QDataStream !!!!
Отправлено: GreatSnake от Январь 13, 2012, 18:28
Перенеси проверку
Код
C++ (Qt)
if(bin_stream.atEnd())
в начало цикла.


Название: Re: Помогите с QDataStream !!!!
Отправлено: mutineer от Январь 13, 2012, 18:30
QFile bin_file(open_file); разрушается по выходу из функции function_1


Название: Re: Помогите с QDataStream !!!!
Отправлено: Racot от Январь 13, 2012, 18:44
Цитировать
QFile bin_file(open_file); разрушается по выходу из функции function_1

Скорее всего дело в этом.......но щас мне  не проверить))))
Хотя я же передал адрес в поток -  bin_stream.setDevice(&bin_file); а bin_stream у меня глобальный......
мне казалось что bin_file ему больше нафиг не нужен....
 


Название: Re: Помогите с QDataStream !!!!
Отправлено: mutineer от Январь 13, 2012, 18:47
Отдача ссылки потоку не отменяет вызов деструктора у QFile, что, скорее всего, приводит к закрытию файла

Ну и теперь QDataStream имеет указатель куда-то в стек, где лежит непонятно что. А он думает, что это QFile, из которого ему читать надо


Название: Re: Помогите с QDataStream !!!!
Отправлено: Racot от Январь 13, 2012, 18:50
Спасибо!!! я думаю вопрос решён.