![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| jimbo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 18.6.2009 Где: Южно-Сахалинск Репутация: нет Всего: нет |
Здравствуйте!
Написал клиент-серверное приложение под windows XP SP3, на MSVS 6.0. Сервер стоит на windows server 2008 - работает как служба и исправно. Запускаю клиент на Vista Home Basic - приложение запускается, пара нажатий на кнопочки типа получить данные с сервера и программа закрывается. Сообщение такое: *.exe не работает Возникшая проблема привела к прекращению работы программы. Виндоус закроет эту программу, а если есть известный способ устранения проблемы, уведомит вас об этом. Ладно, фигня.. Ставлю VS6.0. на Висту и дебажу - все отлично работает. запускаю ехе-шник мимо студии и вуаля - опять та же хрень что я написал чуть выше. Возник вопрос: Почему под студией работает все хорошо, а когда я запускаю как приложение - оно падает? Может где что исправиьт надо? зависит ли это от сервера, потому что падает оно только тогда когда я спрашиваю что-нибудь от сервера? Может дело в функциях винсока? В общем, любые догадки, пожалуйста, потому что я уже все испробовал. Вот код на всякуий случай, получение данных с сервера:
--------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин |
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
Ох, не рекомендуют так делать. Есть мнение, что ты удаляешь полученное значение, не проверяя его на ноль. -------------------- ![]() |
|||
|
||||
| jimbo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 18.6.2009 Где: Южно-Сахалинск Репутация: нет Всего: нет |
Где именно не проверяю? номер строки коде? единственное, я там не удаляю свой объект класса при невозможном заполнении его строкой. Но я пробовал удалять его при выходе нуля (delete ret;ret = NULL;) - все равно не помогает
--------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин |
|||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
этот ret куда-то возвращается, правильно? Его нужно удалить. Но учитывая, что так же возвращаются и нули, то надо проверить, что удаляешь. Я не вижу кода, который работает с этой функцией, поэтому мне трудно гадать. -------------------- ![]() |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Возможно переполнение массива ttt
Возможно использование NULL значения из str (она не на всех путях инициализируется) для доступа в память Поставь на Vista Home твою студию и включи в ней JIT отладчик. При падении программы студия автоматически вызовется и подключится к упавшей проге. Дальше можно будет смотреть, что случилось |
|||
|
||||
| jimbo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 18.6.2009 Где: Южно-Сахалинск Репутация: нет Всего: нет |
Он возвращается примерно так:
--------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Вот это A->~pack(); должно быть delete A; Оригинальный вариант приведет к утечке памяти
|
|||
|
||||
| MTWizard |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 8.10.2007 Где: Київ Репутация: 3 Всего: 4 |
||||
|
||||
| Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 3 Всего: 32 |
Ну, кроме того, что у тебя деструктор вместо delete ничего не вижу. Очень хороший способ - наставить везде выводов, допустим в файл. Пусть после каждой строчки. После падения посмотреть лог. Там видно будет на чём падает.
-------------------- ![]() |
|||
|
||||
| jimbo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 18.6.2009 Где: Южно-Сахалинск Репутация: нет Всего: нет |
почему будет утечка? о_О --------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Потому что явный вызов деструктора только вызовет деструктор, память, которую выделил new возвращена не будет. Для вызова деструктора и возврата памяти надо звать delete (он для этого и сделан) |
||||
|
|||||
| jimbo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 18.6.2009 Где: Южно-Сахалинск Репутация: нет Всего: нет |
А, все, понял почему утечка произойдет)) Спасибо!
Всем так же спасибо за ответы.. я нашел ошибку.. ошибка банальна, в методе toString() забыл выделить память под '\0':) --------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |