Russian Qt Forum

Программирование => С/C++ => Тема начата: blood_shadow от Июль 27, 2010, 17:39



Название: Висячий указатель
Отправлено: blood_shadow от Июль 27, 2010, 17:39
Обязательно ли указатель который ссылался на область памяти и был удален командой delete, нужно обнулять(в даном примере process = 0;) и какие для этого причины?, например:
Код:
void val::runString_value() const
{
    QString program = "C:\\Program_Files\\Qt\\2010.02\\files\\Gui\\string_val\\val1\\String_value(betta).exe";

    QProcess *process = new QProcess;
    process->start(program);
    connect(process, SIGNAL(finished(int, QProcess::ExitStatus)),
            this, SLOT(loadOutputText()));

    delete process;
    process = 0;
    return;
}


Название: Re: Висячий указатель
Отправлено: crossly от Июль 27, 2010, 17:52
нет.... но данный код не корректен...


Название: Re: Висячий указатель
Отправлено: blood_shadow от Июль 27, 2010, 18:01
нет.... но данный код не корректен...
почему не корректен? компилируется и исполняется без проблем. в описании к QPointer указано что он автоматически устанавливается в 0


Название: Re: Висячий указатель
Отправлено: crossly от Июль 27, 2010, 18:24
process удаляется не дожидаясь сигнала finished


Название: Re: Висячий указатель
Отправлено: blood_shadow от Июль 27, 2010, 18:48
process удаляется не дожидаясь сигнала finished
да согласен, уже исправил
1. тогда еще вопрос по теме - выход с ф-ции по ретурну тоже происходит не дожидаясь сигнала finished?
2. как коректно удалить указатель на process?
Спасибо


Название: Re: Висячий указатель
Отправлено: pastor от Июль 27, 2010, 19:04
Цитировать
2. как коректно удалить указатель на process?

Законнектить сигнал finished на слот deleteLater


Название: Re: Висячий указатель
Отправлено: crossly от Июль 27, 2010, 19:06
практически вся работа в Qt происходит асинхронно
1. да
2. тут несколько вариантов.... сделать process членом класса... или использовать локальный EventLoop...


Название: Re: Висячий указатель
Отправлено: crossly от Июль 27, 2010, 19:07
Цитировать
2. как коректно удалить указатель на process?

Законнектить сигнал finished на слот deleteLater
+1 :)


Название: Re: Висячий указатель
Отправлено: blood_shadow от Июль 27, 2010, 19:24
Цитировать
2. как коректно удалить указатель на process?

Законнектить сигнал finished на слот deleteLater
Спасибо получилось  :)


Название: Re: Висячий указатель
Отправлено: blood_shadow от Июль 27, 2010, 19:26
практически вся работа в Qt происходит асинхронно
1. да
2. тут несколько вариантов.... сделать process членом класса... или использовать локальный EventLoop...
Спасибо за ценную инфу  :)


Название: Re: Висячий указатель
Отправлено: blood_shadow от Август 28, 2010, 22:18
практически вся работа в Qt происходит асинхронно
Где можно почитать про асинхронность Qt и как с нею бороться, например у меня есть написанный калькулятор у которого есть два сигнала (нажатие на клавишу-цифру и нажатие на клавишу-знак) они приконектины к разным слотам, так что если набрать "2" "+"  плюс стрет предадущее значение, чтоб можно было ввести допустим "3", так дело в том что иногда получается не "2" "+" "3", а "23" я подозреваю что ф-ция не успевает завершится