我有一个名为pTest的空指针。如果使用指针调用函数,是否有可能立即使应用程序崩溃。NULL指针调用立即失败
0
A
回答
4
而不是使用一个原始指针,你可以创建一个受保护的指针类(智能指针的形式),陷阱指针引用。
#include <stdexcept>
template<typename T>
class CheckedPointer
{
T * ptr;
public:
CheckedPointer(T * init = NULL) : ptr(init) {}
T * operator->() const
{
if (ptr == NULL)
throw std::runtime_error("dereference of NULL pointer");
return ptr;
}
T & operator*() const
{
if (ptr == NULL)
throw std::runtime_error("dereference of NULL pointer");
return *ptr;
}
// ... more members to make this a useful class
};
class Test
{
public:
void Foo() {}
};
int main()
{
CheckedPointer<Test> pTest;
pTest->Foo();
}
1
您的问题需要澄清。如果PTEST是一个空指针的对象和调用它的方法,那么我会期待你的VS2008编译的程序崩溃自身如果任:
- 的方法是虚拟
- 该方法尝试访问实例成员
这意味着如果方法调用语义上是静态的并且不尝试访问实例成员,则该方法调用可能实际上有效。此外,这种事情的行为在调试版本和发布版本之间有所不同。
但是,如果您想让您的应用程序直接在尝试方法调用之前崩溃,那么您可以在每个方法调用之前添加断言或条件中止。或者你可以在每个方法的开始处添加一个(this == NULL)检查(但这不适用于在到达此点之前会触发崩溃的虚拟方法)。
0
您可能想要抛出一个异常并且永远不会捕获它。这会让程序崩溃。
if (pTest == NULL)
throw std::invalid_argument("null pointer");
相关问题
- 1. 指针立即变为NULL
- 2. gmake立即失败PASE
- 3. 指针malloc失败
- 4. C++调试断言失败指针
- 5. Jquery从内部调用Ajax Object立即失败
- 6. 追指针方法失败
- 7. 空指针比较失败
- 8. git推入bitbucket立即失败
- 9. AVCaptureSession启动,然后立即失败
- 10. Salesforce Api登录后立即失败?
- 11. log4j:错误setFile(null,true)调用失败
- 12. log4j:错误setFile(null,true)调用失败。
- 13. RapidXML NULL指针
- 14. 指针和“NULL”
- 15. Libgdx null指针
- 16. 如何使free()立即跟随赋值为NULL导致悬挂指针?
- 17. P /调用指针指针?
- 18. NULL指针使用hashmap
- 19. 免费()无效指针 - 释放指针阵列失败
- 20. Strtok递归调用指针丢失
- 21. “的fopen”返回NULL文件指针,即使是用C
- 22. Tapestry消息 - 注入失败,空指针
- 23. 的malloc的指针参数失败
- 24. ArtifactoryPublish失败,空指针异常
- 25. Tycho jenkins构建失败 - 空指针
- 26. 动态指针数组realloc失败
- 27. Android的 - 获取MotionSensor失败(空指针)
- 28. 删除或智能指针失败
- 29. C将指针指向NULL
- 30. NULL指针问题?
'pTest'是一个空指针的是什么?它是一个函数指针还是你作为参数传递的东西?如果是后者,则可以在函数中执行类似'if(pTest == NULL)abort()'的操作。 – 2012-04-14 02:14:42
@KeithThompson如果它是前者,它应该自行炸毁。 – jpm 2012-04-14 02:19:29
@jpm:它*应该*,但不能保证。 – 2012-04-14 02:27:55