История изменений
Исправление
erfea,
(текущая версия)
:
Я не сильно волоку в Qt, но даже так понимаю, что ты чего-то не понимаешь. О каком уничтожении идёт речь, если выхода из локальной области нет?
Qt тут не причем. Ещё раз объясняю:
В выражении «const char *message=msg.toLocal8Bit().data();» ты методом «QByteArray Qstring::toLocal8Bit()» создаешь объект класса QByteArray. Сей персонаж живёт до тех пор пока выполняется выражение, сразу как выражение отработало объект уничтожается. Это элементарно, сие нужно знать. Дык вот а затыка у тебя происходит когда ты обращаешься к полю этого объекта, полученному посредством метода «char * QByteArray::data()». Т.к. сей метод отдаёт лишь указатель на содержащиеся в объекте класса QByteArray, указатель не действителен сразу по завершению выполнения сего выражения, вместе со смертью объекта QByteArray умирает и то на что ссылается указатель «char * QByteArray::data()». Объект получив поток выполнения в свой деструктор просто удаляет эти данные, т.к. они лежат в куче. А любой адекватный программист как отче наш знает, что деструктор должен чистить кучу, иначе прога потечёт. Проблема не в Qt и не в ЯП, проблема в образовании.
ЗЫ:
выхода из локальной области нет
Я тебе писал выше пример как правильно, вот там выхода из области нет, там я расположил пресловутый QByteArray на стеке и он живёт пока не стек не отмотнётся назад. Это элементарно.
Исходная версия
erfea,
:
Я не сильно волоку в Qt, но даже так понимаю, что ты чего-то не понимаешь. О каком уничтожении идёт речь, если выхода из локальной области нет?
Qt тут не причем. Ещё раз объясняю:
В выражении «const char *message=msg.toLocal8Bit().data();» ты методом «QByteArray Qstring::toLocal8Bit()» создаешь объект класса QByteArray. Сей персонаж живёт до тех пор пока выполняется выражение, сразу как выражение отработало объект уничтожается. Это элементарно, сие нужно знать. Дык вот а затыка у тебя происходит когда ты обращаешься к полю этого объекта, полученному посредством метода «char * QByteArray::data()». Т.к. сей метод отдаёт лишь указатель на содержащиеся в объекте класса QByteArray, указатель не действителен сразу по завершению выполнения сего выражения, вместе со смертью объекта QByteArray умирает и то на что ссылается указатель «char * QByteArray::data()». Объект получив поток выполнения в свой деструктор просто удаляет эти данные, т.к. они лежат в куче. А любой адекватный программист как отче наш знает, что деструктор должен чистить кучу, иначе прога потечёт. Проблема не в Qt и не в ЯП, проблема в образовании.