Russian Qt Forum

Qt => Общие вопросы => Тема начата: Zmey от Апрель 06, 2005, 10:06



Название: Структура в памяти против QT
Отправлено: Zmey от Апрель 06, 2005, 10:06
Есть указатель на область в памяти, и в этой памяти лежат: сначала DWORD, потом __int64, потом WORD, потом BYTE. То есть 4 байта, 8, 2 и 1.
Делаю структуру:
   struct stnameAllFiles {
      Q_UINT32 dwFileSize;
      Q_UINT64 qwLastTime;
      Q_UINT16 wNameLenght;
      Q_UINT8 iTypeRecord;
   };
И указатель на нее:
   stnameAllFiles* pstAllFiles;
Присваиваю этому указателю:
pstAllFiles = (stnameAllFiles*)lpv;
lpv - указатель на память, где лежат числа.
Так вот на pstAllFiles->dwFileSize выделяется 8 байт, на qwLastTime - 8 байт, на wNameLenght - 2, на iTypeRecord - 2.
Посоветовали в настройках Visual Studio в Project - Settings... - C/C++ - Category: Code Generation - Struct member alignment поставить 1 Byte (а стояло 8 Byte).
Но теперь в конструкторе функция QComboBox::insertStringList выдает Unhandled exception in MyProg.exe (QT-MT333.DLL): 0xC0000005: Access Violation.
Как это победить?
Qt 3.3.3, Visual Studio 6 SP6, WinXP SP2.


Название: Структура в памяти против QT
Отправлено: Admin от Апрель 06, 2005, 12:38
есть аналогичная директива

#pragma не помню как дальше

ее можно локально в код вставить


а вообще такое лучше старатся не использовать


Название: Структура в памяти против QT
Отправлено: Zmey от Апрель 06, 2005, 13:33
#pragma pack(1) помогло. Спасибо.
Я бы с удовольствием не использовал, если бы без этого работало.


Название: Структура в памяти против QT
Отправлено: Admin от Апрель 06, 2005, 15:08
когда структуру пишешь например в файл надо всегда
поэлементно упаковывать ее
а не просто
fwrite(&struct,1,sizeof(struct),fl);


Название: Re: Структура в памяти против QT
Отправлено: kolob от Июнь 02, 2011, 13:48
Такая же ошибка. Что делать? Вываливается когда пытаюсь добавить иконку для меню
Код:
act->setIconSet(QPixmap::fromMimeSource("icon.png"));


Название: Re: Структура в памяти против QT
Отправлено: GreatSnake от Июнь 02, 2011, 14:01
2 kolob
Когда уже на Qt4 перейдёшь? Сам же знаешь, что здесь знатоков Qt3 практически нет.


Название: Re: Структура в памяти против QT
Отправлено: kolob от Июнь 02, 2011, 14:16
Цитировать
Когда уже на Qt4 перейдёшь?
Да вот уже собираюсь на 4.6 переходить с нового проекта. А тут старый поддерживать надо, а он на 3-ке.
Цитировать
Сам же знаешь, что здесь знатоков Qt3 практически нет.
Но некоторые же когда то начинали и с 3-й.


Название: Re: Структура в памяти против QT
Отправлено: Alex Custov от Июнь 08, 2011, 01:17
пакуй структуры через #pragma pack(1) или аттрибуты http://sig9.com/articles/gcc-packed-structures