Название: Ошибка в отладке и нормальная работа при простом запуске программы Отправлено: helsq от Ноябрь 10, 2011, 12:00 Господа знатоки подскажите в чем может быть проблема.
Есть следующий класс: Код: class workersmsg Вот так используется: Код: test(workersmsg(0, "work")); Код: void Widget::test(const workersmsg &wmsg){ Если просто запустить все работает нормально. А в режиме отладки wmsg.Message() возвращает либо "work", либо пустую строку, либо вообще не понятный мусор, либо падает с сегментацией памяти, а точнее все подряд в разном порядке. В чем может быть проблема, подскажите будьте добры. Название: Re: Ошибка в отладке и нормальная работа при простом запуске программы Отправлено: kambala от Ноябрь 10, 2011, 12:43 присваивать сишные строки через = - плохо вообще говоря. вот std::string или QString - другое дело.
если же хочешь все-таки пользоваться сишными, то сделай _Message неконстантной и вместо = делай strcpy (или qstrcpy). но тогда не нужно забывать об управлении памятью. Название: Re: Ошибка в отладке и нормальная работа при простом запуске программы Отправлено: Igors от Ноябрь 10, 2011, 14:20 Господа знатоки подскажите в чем может быть проблема. Не надо быть знатоком, это копирование адреса, а не содержимого. Напр если входной Message объявлен как Код: _Message = Message; Код то все Ok. А вот если он создается и затем удаляется - то _Message будет указывать на мусор который остался Название: Re: Ошибка в отладке и нормальная работа при простом запуске программы Отправлено: helsq от Ноябрь 10, 2011, 18:05 присваивать сишные строки через = - плохо вообще говоря. вот std::string или QString - другое дело. если же хочешь все-таки пользоваться сишными, то сделай _Message неконстантной и вместо = делай strcpy (или qstrcpy). но тогда не нужно забывать об управлении памятью. С самого начала думал на QString писать, так наверное и сделаю. Не надо быть знатоком, это копирование адреса, а не содержимого. Напр если входной Message объявлен как Код то все Ok. А вот если он создается и затем удаляется - то _Message будет указывать на мусор который остался А вот если он вот так используется test(workersmsg(0, "work")), когда разрушается экземпляр workersmsg? После того как отработает функция? Тогда почему разрушается "work"? Название: Re: Ошибка в отладке и нормальная работа при простом запуске программы Отправлено: kambala от Ноябрь 10, 2011, 18:33 workersmsg - да, после функции, а "work" - после выхода из конструктора
Название: Re: Ошибка в отладке и нормальная работа при простом запуске программы Отправлено: Igors от Ноябрь 10, 2011, 19:47 А вот если он вот так используется test(workersmsg(0, "work")), когда разрушается экземпляр workersmsg? После того как отработает функция? Тогда почему разрушается "work"? Так "work" должен жить forever. Не знаю, может причина в другомНазвание: Re: Ошибка в отладке и нормальная работа при простом запуске программы Отправлено: helsq от Ноябрь 11, 2011, 06:54 Спасибо за помощь. В общем, я получил ответы на интересующие меня вопросы, кроме одного - откуда разница в работе программы при запуске через ctrl-r (запуск) и F5 (отладка), так ведь можно напороться на грабли, которые наоборот будут возникать в рабочем режиме и не возникать в отладке или я зря паникую?
|