Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: Разуев Максим от Май 21, 2008, 23:26



Название: [4.4.0-win32-msvs] Проблема c вылетом в релиз версии программы
Отправлено: Разуев Максим от Май 21, 2008, 23:26
В релиз версии программы у меня происходит вылет в систему с ошибкой 0xc0000005. При отладке студией релиз версии (в debug вылет не наблюдается и не отслеживается???) выдается ошибка "Heap missing last entry in committed range near 4ac5e80". Вылет происходит достаточно спонтанно.


Название: Re: [4.4.0-win32-msvs] Проблема c вылетом в релиз версии программы
Отправлено: Вячеслав от Май 22, 2008, 00:21
100% косяк в работе с памятью .... Debug вариант rtl более полно инитит и чистит переменные при запуске проги ... Соответственно - ищи "повисший" указатель (не иницаализированный, но используемый) или обращение по указателю после удаления объекта(но это менее вероятно)
valgrind в помощь ;)


Название: Re: [4.4.0-win32-msvs] Проблема c вылетом в релиз версии программы
Отправлено: Разуев Максим от Май 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 на освобождении памяти кучи.


Название: Re: [4.4.0-win32-msvs] Проблема c вылетом в релиз версии программы
Отправлено: pastor от Май 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.





Название: Re: [4.4.0-win32-msvs] Проблема c вылетом в релиз версии программы
Отправлено: Sergeich от Май 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;


Название: Re: [4.4.0-win32-msvs] Проблема c вылетом в релиз версии программы
Отправлено: Разуев Максим от Май 23, 2008, 19:17
Я менял на size+1. Вылет не отслеживался при трассировке. При подключении программы к студии (Attach process) ошибка выскакивала в дизассемблере в модули winnt.


Название: Re: [4.4.0-win32-msvs] Проблема c вылетом в релиз версии программы
Отправлено: Godfather от Май 30, 2008, 14:55
ошибка работы с памятью
у меня тоже вылетала только в релизе в районе системных библиотек

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