Pointers 指针比较使我的程序崩溃

Pointers 指针比较使我的程序崩溃,pointers,crash,Pointers,Crash,我有一行代码正在发布模式下崩溃我的程序,但不是在调试模式下 if((DWORD)pPrev < (DWORD)pBlock && pPrev->pList == &gFreeList) if((DWORD)pPrevpList==&GFRELELIST) 我向DWORD施放命令来比较指针的地址。。。在此if块中,前一个节点将累加当前节点,但前提是其物理地址低于当前块且已空闲。。。块代码不是问题所在。它甚至不会进入街区。它在比较指针时崩溃 代码在调试模式下工

我有一行代码正在发布模式下崩溃我的程序,但不是在调试模式下

if((DWORD)pPrev < (DWORD)pBlock && pPrev->pList == &gFreeList)
if((DWORD)pPrev<(DWORD)pBlock&pPrev->pList==&GFRELELIST)
我向DWORD施放命令来比较指针的地址。。。在此if块中,前一个节点将累加当前节点,但前提是其物理地址低于当前块且已空闲。。。块代码不是问题所在。它甚至不会进入街区。它在比较指针时崩溃

代码在调试模式下工作得很好,所以我无法让它在调试模式下崩溃甚至出现故障,以便我看到正在发生什么。。。我看不出这有什么不对。有什么想法吗

如果有帮助的话,我将使用VC6进行原型开发(只是因为IDE的资源密集度较低)


谢谢

比较不应该在这里造成问题。事实上,我认为即使没有德沃德的演员阵容,这种比较也会奏效。我怀疑是pPrev->pList导致了问题。您确定在取消引用之前pPrev没有被意外释放吗?

不能初始化
pPrev

如果是这样的话,
(DWORD)pPrev<(DWORD)pBlock
的先决条件不能保持在调试模式下,因为unitialized
pPrev
被设置为
0xcccc
(或
CD
?),它肯定会大于任何向DWORD投射的指针(2,在32位模式下最多3GBs->最大用户空间地址
0xbffffffff


然而,在发布模式下,它将包含任何垃圾,因此它可以在
(DWORD)pPrev<(DWORD)pBlock
中被解除引用,并使程序崩溃。

你知道,VC6因其异常的缺陷而臭名昭著。我将再次查看它,但在此之前pPrev甚至没有被引用。。。在调试模式下,在发布模式下崩溃之前,pPrev指针很好。。。我只是希望我能让它在调试模式下崩溃。当用VS2008在发布模式下编译时,它运行良好。。。我放弃VC6。我能想到的唯一一件事是某种优化错误。在发布模式下运行时,您是否尝试过跟踪所有涉及的变量,例如,在出现问题的行之前使用printf()?