测试有效性指针(C / C ++)

如果指定的指针是“有效的”,有没有办法确定(当然是以编程方式)?检查NULL很简单,但像0x00001234这样的东西呢?当试图取消引用这种指针时,会发生异常/崩溃。


首选跨平台方法,但平台特定(适用于Windows和Linux)也可以。


更新澄清: 问题不在于陈旧/释放/未初始化的指针; 相反,我正在实现一个从调用者获取指针的API(如指向字符串的指针,文件句柄等)。调用者可以(有意或无意地)发送无效值作为指针。如何防止崩溃?


SMILET
浏览 687回答 3
3回答

ABOUTYOU

更新澄清:问题不在于陈旧,释放或未初始化的指针; 相反,我正在实现一个从调用者获取指针的API(如指向字符串的指针,文件句柄等)。调用者可以(有意或无意地)发送无效值作为指针。如何防止崩溃?你无法进行检查。你根本无法检查指针是否“有效”。你必须相信,当人们使用带指针的函数时,那些人就会知道他们在做什么。如果他们将0x4211作为指针值传递给你,那么你必须相信它指向地址0x4211。如果他们“意外地”击中一个物体,那么即使你会使用一些可怕的操作系统功能(IsValidPtr或其他),你仍然会陷入一个错误并且不会快速失败。开始使用空指针发信号通知这种事情并告诉你的库的用户,如果他们倾向于意外地传递无效指针,他们不应该使用指针,严重:)

ITMISS

防止调用者发送无效指针导致的崩溃是制作难以找到的静默错误的好方法。对于使用你的API的程序员来说,通过崩溃而不是隐藏它来获取他的代码是假的明确信息,这不是更好吗?
打开App,查看更多内容
随时随地看视频慕课网APP