Russian Qt Forum
Ноябрь 23, 2024, 18:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [4.4.0-win32-msvs] Проблема c вылетом в релиз версии программы  (Прочитано 5272 раз)
Разуев Максим
Гость
« : Май 21, 2008, 23:26 »

В релиз версии программы у меня происходит вылет в систему с ошибкой 0xc0000005. При отладке студией релиз версии (в debug вылет не наблюдается и не отслеживается???) выдается ошибка "Heap missing last entry in committed range near 4ac5e80". Вылет происходит достаточно спонтанно.
Записан
Вячеслав
Гость
« Ответ #1 : Май 22, 2008, 00:21 »

100% косяк в работе с памятью .... Debug вариант rtl более полно инитит и чистит переменные при запуске проги ... Соответственно - ищи "повисший" указатель (не иницаализированный, но используемый) или обращение по указателю после удаления объекта(но это менее вероятно)
valgrind в помощь Подмигивающий
Записан
Разуев Максим
Гость
« Ответ #2 : Май 23, 2008, 17:48 »

Обнаружил таки где проблема, хотя так и не понял полной причины.
Код:
int size=url.size();
wchar_t* env=new wchar_t[size];
env[size]=0;
url.toWCharArray(env);
lpszBuffer=env;
url - QString
lpszBuffer - LPCWSTR (const wchar_t*)

Я переделал env в статический массив и все заработало. Кстати ошибка выскакивала в модуле winnt.dll на освобождении памяти кучи.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Май 23, 2008, 18:00 »

А в какой строке то падало?

Возможно был выделен недостаточного размера массив env.

Цитировать
int QString::toWCharArray ( wchar_t * array ) const
Fills the array with the data contained in this QString object. The array is encoded in utf16 on platforms where wchar_t is 2 bytes wide (e.g. windows) and in ucs4 on platforms where wchar_t is 4 bytes wide (most Unix systems).
array has to be allocated by the caller and contain enough space to hold the complete string (allocating the array with the same length as the string is always sufficient).
returns the actual length of the string in array.



Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Sergeich
Гость
« Ответ #4 : Май 23, 2008, 18:50 »

Код:
wchar_t* env=new wchar_t[size];
env[size]=0; // Обращение к элементу следующего за последним
Надо так:
Код:
wchar_t* env=new wchar_t[size+1];
env[size]=0;
Записан
Разуев Максим
Гость
« Ответ #5 : Май 23, 2008, 19:17 »

Я менял на size+1. Вылет не отслеживался при трассировке. При подключении программы к студии (Attach process) ошибка выскакивала в дизассемблере в модули winnt.
Записан
Godfather
Гость
« Ответ #6 : Май 30, 2008, 14:55 »

ошибка работы с памятью
у меня тоже вылетала только в релизе в районе системных библиотек

был примерно такой код:
Код:
class My : public QGraphicsPixmapItem
{
..
private:
// дополнительный член
}
и я делал
Код:
My* m = new My();
..
(QGraphicsPixmapItem*)m
каст меньшего по занимаемой памяти объекта на большего
дебаг это прощал
в релизе вылетало
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.114 секунд. Запросов: 23.