Проблемы с 64-битными указателями

Я использую Windows 7 и у меня есть 64-битная и 32-битная версия моей программы. 32-битная версия работает отлично, однако у меня возникают проблемы с 64-битной версией во время выполнения. У меня есть элемент представления списка, и я заполняю столбцы своей информацией. Все они печатают, но один печатается неправильно. Это то, что он печатает (я извиняюсь за отсутствие картинки, но как новый участник я не могу публиковать картинки):

Грузовая машина

ÍÍÍÍHRZ141

ÍÍÍÍHRZ152

Кажется, он помещает 4 нулевых символа перед информацией, которую я на самом деле хочу отобразить. При дальнейшем рассмотрении создается впечатление, что адресация неверна. Вот раздел моего кода, где происходит ошибка:

Audit * audit = (Audit *)plvdi->item.lParam;

    switch(plvdi->item.iSubItem)
    {
    case 0:
      {
        plvdi->item.pszText = audit->Truck;
        while(plvdi->item.pszText[0] != 'H')
        {
          plvdi->item.pszText++;
        }
      }
      return true;

Это временное исправление из-за того, что все мои имена грузовиков начинаются с символа H. plvdi->item.psz text - это текстовое отображение элемента представления списка, а audit->Truck - char[]. Это должно быть так просто, как:

sprintf(plvdi->item.pszText, audit->Truck);

но это не похоже на работу. Это оставляет меня с той же ошибкой. При запуске адрес plvdi->item.pszText на 4 байта меньше, чем адрес audit->Truck, после оператора присваивания (точка останова в операторе while), который, как я считаю, вызывает появление 4 нулевых символов. Я просто не уверен, как решить эту проблему без обходного пути, такого как тот, который я опубликовал, почему это происходит и почему только в 64-битном решении. Заранее благодарю за любую помощь по этому вопросу.

РЕДАКТИРОВАТЬ: Из других подобных проблем, которые я обнаружил в моей программе, похоже, что-то связано с указателями. Все в моем классе Audit, появившееся после вектора выбора, имело проблемы и оказалось отключенным на 4 байта. В другом классе я обнаружил, что все, что происходит после указателя на Audit, не удалось, и у меня также были некоторые проблемы со строками (которые технически являются указателями на массивы символов). Когда я переместил элементы с указателями в конец класса в заголовочном файле, все снова заработало нормально. Любая идея, если строки, векторы или другие подобные структуры имеют указатели, которые зависят от 32 или 64-битных систем?

1 ответ

На 64-битной платформе Windows размер указателя составляет 8 байт, а в 32-битной конфигурации - 4. Проверьте код, чтобы избежать предположения о размере 4 байта.

Другие вопросы по тегам