我有一行代码在发布模式下崩溃了我的程序,但没有在调试模式下崩溃......
if((DWORD)pPrev < (DWORD)pBlock && pPrev->pList == &gFreeList)
我转换为DWORD来比较指针的地址......在这个if-block中,前一个节点将累积当前节点,但前提是它的物理地址低于当前块并且它已经空闲。 ..块代码不是问题。它甚至不会进入街区。它在指针比较过程中崩溃了。
代码在调试模式下完美运行,所以我无法让它在调试模式下崩溃甚至出现故障,让我看看发生了什么......我没有看到这有什么问题。有什么想法吗?
如果有帮助,我使用VC6进行原型开发(仅仅因为IDE资源消耗较少)......
由于
答案 0 :(得分:0)
比较不应该在这里造成问题。事实上,我认为即使没有强制转换为DWORD,这种比较也会起作用。我怀疑它是导致问题的pPrev-&gt; pList。你确定pPrev在取消引用之前没有被意外释放吗?
答案 1 :(得分:0)
pPrev
无法初始化?
如果是这样,前提条件(DWORD)pPrev < (DWORD)pBlock
无法保持在调试模式,因为已将单位化pPrev
设置为0xCCCCCCCC
(或CD
?),这肯定会更大比任何转换为DWORD的指针(2,32位模式下最多3GB,&gt;最大用户空间地址0xBFFFFFFF
)。
但是,在发布模式下它会包含任何垃圾,因此可以在(DWORD)pPrev < (DWORD)pBlock
中取消引用并使程序崩溃。