GDB中的简单计算会产生不一致的结果

时间:2017-11-20 21:41:36

标签: c gdb

我正在尝试在GDB中调试以下代码行:

p=((uint32 *) tiff_pixels)+image->columns*i;

p i yeilds 8

p columns yeilds 32

p image->columns*i正确地产生了256

p ((uint32 *) tiff_pixels)收益0x619000008780

所以我希望((uint32 *) tiff_pixels)+image->columns*i能够获得0x619000008880,但我会得到0x619000008b80

我可能在这里做了一些微不足道的错误/假设,但我似乎无法弄明白。

1 个答案:

答案 0 :(得分:2)

你忘了乘以每个像素的大小,即4个字节。

p=((uint32 *) tiff_pixels)+image->columns*i;

您已将tiff_pixels转换为指向uint32的指针。每个uint32是四个字节。因此,如果向指针添加一个,它将指向 next uint32,这是第一个之后的四个字节。