我有一行代码在 Release模式下使我的程序崩溃,但在 Debug模式下却没有......
if((DWORD)pPrev < (DWORD)pBlock && pPrev->pList == &gFreeList)
我转换为 DWORD 来比较指针的地址......在这个 if block 中,前一个节点将累积当前节点,但前提是它的物理地址低于当前 block 并且它已经空闲...... block 代码不是问题。它甚至不会进入区 block 。它在指针比较期间崩溃。
该代码在 Debug模式下完美运行,所以我无法让它在 Debug模式下崩溃甚至出现故障,让我看看发生了什么......我不明白这有什么问题。有任何想法吗?
如果有帮助,我将使用 VC6 进行原型(prototype)开发(仅仅是因为 IDE 资源密集型较少)...
谢谢
最佳答案
不能pPrev
没有初始化?
如果是,前提条件 (DWORD)pPrev < (DWORD)pBlock
无法保持在 Debug模式,因为未初始化 pPrev
设置为 0xCCCCCCCC
(或 CD
?),这肯定会大于任何转换为 DWORD 的指针(2,在 32 位模式下最多 3GB -> 最大用户空间地址 0xBFFFFFFF
)。
但是,在 Release模式下,它会包含任何垃圾,因此可以在 (DWORD)pPrev < (DWORD)pBlock
中取消引用。并使程序崩溃。
关于pointers - 指针比较使我的程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4382883/