我在C ++,Visual Studio 2010中的64位Win 7盒子上看到了一些奇怪的行为:
if((Event*)0 != metaData.event)
当metaData.event为0时,为true。调试器表示metaData.event的值为0x000000000000000f,而(Event *)0的值为0x00000000。
问题出在哪里?
干杯, 米哈伊
答案 0 :(得分:2)
指针不是0
0x0...(lots of zeros)..00f
表示 0xf = 15dec 。
即使指针(可能)无效,您也会将条件评估为 true 。
答案 1 :(得分:2)
你的指针显然是0xf,或十五。在Windows上,这不是指向有效对象的指针(将是> = 0x1000
)。实际上,几乎可以肯定是通过向空指针添加偏移量而引起的。换句话说,您之前有未定义的行为。