64位指针的问题

时间:2012-07-17 18:51:48

标签: pointers 64-bit 32bit-64bit 32-bit pointer-address

我使用的是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文本是列表视图项的文本显示,而audit-> Truck是一个炭[]。它应该简单:

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

但这似乎不起作用。它给我留下了同样的错误。运行时,地址plvdi-> item.pszText比audit-> Truck的地址小4个字节,在赋值语句(while语句上的断点)之后,我相信这会导致4个空字符。我只是不确定如何解决这个问题而不解决我发布的问题,为什么会发生这种问题,以及为什么只能在64位解决方案中解决。提前感谢您对此事的任何帮助。

编辑:从我在程序中发现的其他类似问题来看,它似乎与指针有关。在我的Audit类中,在选择向量之后出现的所有内容都存在问题,并且似乎关闭了4个字节。在另一个类中,我发现在指向审计的指针之后发生的所有事情都失败了,我也遇到了一些字符串问题(技术上指向char数组的指针)。当我将带有指针的元素移动到头文件中类的末尾时,一切似乎再次正常工作。知道字符串,向量或其他类似结构是否具有依赖于32或64位系统的指针?

1 个答案:

答案 0 :(得分:0)

在64位Windows平台上,指针的sizeof为8字节,而在32位配置上为4。检查代码以避免4字节大小假设。