Jan*_*sen 20 c++ nullpointerexception
Java和C#以及可能还有许多其他语言都有一个预定义的异常类,当使用null参数时它会抛出它.C++中有类似的东西吗?如果没有,是否有我可以使用的另一个预定义的异常,或者我应该定义自己的异常?
Luc*_*ore 21
取消引用NULL指针是C++中未定义的行为 - 这意味着代码似乎可以正常工作.不保证会抛出异常.你可以使用
异常(为它提供有意义的值 - "p is NULL"),但您必须自己进行检查.
通常,在C++(或C语言)中,您永远不会取消引用NULL指针.这样做有未定义的行为(可能是我所知道的任何实现的段错误,但任何事情都可能根据标准发生).在其他语言中它也可能是一件坏事,但我不知道那些足以断言.
最好是防止这种情况,而不是尝试从中恢复(无论如何都无法在C或C++中完成).
防止一些相关程序员错误的常用模式是使用assert()内部函数体,例如:
int foo(int* myint)
{
// Ensure myint is not NULL
assert(myint);
// Do something with myint
(*myint)++;
return *myint;
}
Run Code Online (Sandbox Code Playgroud)
这些assert()调用在发布版本中完全被忽略,因此在生产中没有成本.他们只是帮助发展.在调试版本上,如果不满足条件,程序会立即中止并显示非常明确的错误消息.通过调试器运行它,您可以轻松检查调用堆栈以查询确切原因.
C++中没有用于解除引用NULL指针的标准异常.
如果你想要它,你可以自己实现它.在UNIX上设置SIGSEGV信号处理程序并从处理程序中抛出异常.在Windows上,使用_set_se_translator()API安装"结构化异常"处理程序.
| 归档时间: |
|
| 查看次数: |
16887 次 |
| 最近记录: |