【发布时间】:2011-09-23 01:55:05
【问题描述】:
环境:VS 2008,C++
我有如下代码:
void HopeException(LPVOID nVerify)
{
char *p = NULL;
p = (char *)nVerify;
delete []p;
}
当我使用参数 not-NULL 调用函数“HopeException”时,例如:
HopeException(123);
那我希望程序会抛出异常。
但是当我在 VS 2008 上用 Release 模式编译代码时,程序运行良好。
我不知道为什么。谁能帮我解决这个问题?
或者你有什么好主意用另一种方法来实现这个功能?
编辑:
非常抱歉,我想我之前发布了错误的代码。
实际上,我正在为我的软件做保护。 我的软件会获取 DLL 文件的 CRC 值,然后我的软件会检查 CRC 值,如下所示:
unsigned int VerifyCRC = FF234322;
unsinged int CRC = getCRC("Fun.dll");
LPVOID lpResult = CRC & (~VerifyCRC);
HopeException(lpResult);
所以根据下面的代码,如果破解者破解Fun.dll文件,执行会抛出异常。
这正是我想要的。
【问题讨论】:
-
该代码甚至不应该编译!
-
删除非
new分配的数据是未定义的,所以无论发生什么都取决于实现。看起来你只是在没有它在你脸上爆炸的情况下幸存下来。但是,您到底想做什么? -
我不知道你想用该代码做什么或实现什么,但我知道的是你表现出未定义的行为。
-
@Marlon 其实不一定。将指针存储在原语中应该是有效的 c++(尽管为此使用 int 并不是特别聪明,并且可能适得其反,但是哦,好吧)
-
@jell 我从 Ansons 对您的问题的回答中添加了您的更正/澄清。
标签: c++ visual-studio-2008 exception release