有什么方法可以确定(当然是通过程序)给定的指针是否“有效”?检查 NULL 很容易,但是像 0x00001234 这样的东西呢?当试图取消引用这种指针时,会发生异常/崩溃。
首选跨平台方法,但特定平台(适用于 Windows 和 Linux)也可以。
更新说明: 问题不在于陈旧/释放/未初始化的指针;相反,我正在实现一个 API,它从调用者那里获取指针(如指向字符串的指针、文件句柄等)。调用者可以(有意或错误地)发送一个无效值作为指针。如何防止崩溃?
最佳答案
Update for clarification: The problem is not with stale, freed or uninitialized pointers; instead, I'm implementing an API that takes pointers from the caller (like a pointer to a string, a file handle, etc.). The caller can send (in purpose or by mistake) an invalid value as the pointer. How do I prevent a crash?
你不能做那个检查。您根本无法检查指针是否“有效”。你必须相信,当人们使用带指针的函数时,这些人知道他们在做什么。如果他们将 0x4211 作为指针值传递给您,那么您必须相信它指向地址 0x4211。如果他们“不小心”撞到了一个物体,那么即使你使用了一些可怕的操作系统函数(IsValidPtr 或其他),你仍然会陷入错误并且不会很快失败。
开始使用空指针来发出这种信号,并告诉库的用户,如果他们倾向于不小心传递无效指针,他们不应该使用指针,严重:)
关于c++ - 测试指针的有效性 (C/C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/551069/