首页
社区
课程
招聘
[求助]问个比较简单的问题
发表于: 2011-9-22 23:05 4657

[求助]问个比较简单的问题

2011-9-22 23:05
4657
C++的代码

void HopeException(int nVerify)
{
      char *p = NULL;
      p = nVerify;
      delete []nVerify;
}

这个代码是希望验证输入的nVerify是一个NULL,如果不是NULL的话,那就让程序直接出错,不给任何的提示。

但是这个代码在VS 2008的环境中, 如果在Debug模式下,编译出来如果给一个非NULL的值就出错了,但是在Release模式下编译出来的,怎么样都不会出错,真的很奇怪,不知道有没有人知道!

或者要实现我这样的功能,有没有更好的方法?

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
if (p!=NULL) 出错
2011-9-23 00:12
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
通过IF判断,这个我当然知道,我只是希望如果查出来出错的话,直接出错程序崩溃,不需要判断的那种
2011-9-23 09:20
0
雪    币: 209
活跃值: (138)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
试试这个,Debug和Release版都有效

void HopeException(LPVOID lpPointer)
{
    DWORD dwData = (DWORD)lpPointer;

    __try
    {
        dwData /= dwData;
    }
    __except(EXCEPTION_EXECUTE_HANDLER)
    {

    }

    volatile DWORD __unused = *(DWORD *)((unsigned char *)&dwData + 0x80000000 * dwData);
}

楼主的格式:
void HopeException(int nVerify)
{
    __try
    {
        nVerify /= nVerify;
    }
    __except(EXCEPTION_EXECUTE_HANDLER)
    {

    }

    volatile int __unused = *(int *)((unsigned char *)&nVerify + 0x80000000 * nVerify);
}
2011-9-23 09:56
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不明白
那你这两句作用是什么?
char *p = NULL;
      p = nVerify;
2011-9-23 09:58
0
雪    币: 76
活跃值: (114)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
应该是优化在作怪,自己看下反汇编把。。。
2011-9-23 10:01
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
shilyx

你能说一下具体的原理吗???
2011-9-24 10:55
0
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
if( p != NULL )
throw "不是NULL"

C++里就这么做就行。
2011-9-24 11:05
0
游客
登录 | 注册 方可回帖
返回
//