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

标签 c++ c validation pointers null

有什么方法可以确定(当然是通过程序)给定的指针是否“有效”?检查 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/

相关文章:

c++ - 如何用 0 memset 匿名 union

c - 为什么 buffer1[5] 的值为 24

c - 使用 char 缓冲区随机播种

java - selectOne 和 selectMany 选项是否受 SelectItems 限制?

c++ - 是否可以指定一个空的 std::vector 作为默认参数?

c++ - C++ Regex POSIX 字符类的问题

编译实模式asm (rootkit.arsenal)

validation - 在 ui :repeat 中使用带有变量属性的验证器

asp.net - 设置asp.net验证器的顺序

c++ - 谁能告诉我如何编写一个简单的 C++ 代码来将我的数据(从变量)导出到 PDF 文件而不使用任何外部库或实用程序?