如何检查指针是否有效?

时间:2009-06-14 17:51:40

标签: c winapi pointers

我很清楚这个问题的丑陋,我还是想知道是否有可能:

当程序尝试读取/写入无效指针(NULL,未分配的块等)时,窗口会因访问冲突异常而崩溃应用程序。

问题是,有没有办法检查这个指针在尝试使用它之前会产生异常,否则,有没有办法捕获这个异常?

7 个答案:

答案 0 :(得分:10)

捕捉这种错误是解决症状,而不是根本原因。

以下习语适用于任何平台:

  • 将所有指针初始化为零

  • 如果您不能保证指针有效,请在指向它之前检查它是非0

  • 删除对象时,删除后将指针设置为0

  • 将指针传递给其他函数时要小心对象所有权问题

答案 1 :(得分:8)

有一些功能IsBadReadPtrIsBadWritePtr可能会做你想要的。还有an article解释了为什么不应该使用它们。

答案 2 :(得分:8)

如果必须使用原始指针,最好的办法是确保它是有效指针或NULL。然后你可以通过检查它是否等于NULL来检查它是否有效。

但是要回答你的问题,你可以用structured exception handling (SEH)来捕捉这些事情。

话虽如此,SEH is a bad idea

答案 3 :(得分:5)

你当然可以测试指针是否为NULL!

if ( ptr == NULL ) {
   // don't use it
}

这是您可以做的唯一便携式测试。 Windows确实提供了各种API来测试指针,但正如其他人指出的那样,使用它们可能会有问题。

答案 4 :(得分:4)

答案 5 :(得分:1)

我认为你正在寻找类似IsBadReadPtr的东西。

文档:

http://msdn.microsoft.com/en-us/library/aa366713(VS.85).aspx

答案 6 :(得分:0)

我不了解Windows,但在* nix中你可以安装一个SIGSEGV信号处理程序来拦截异常。