有没有办法(当然是通过编程)确定给定指针是否"有效"呢?判断NULL很容易,但是0x00001234之类的东西呢?try 取消引用此类指针时,会发生异常/崩溃.

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

Update for clarification:

推荐答案

Update for clarification:问题不在于陈旧的、释放的或未初始化的指针;相反,我实现了一个从调用方获取指针的API(如指向字符串的指针、文件句柄等).调用方可以(有意或错误地)将无效值作为指针发送.我如何防止撞车?

你不能开那张支票.根本无法判断指针是否"有效".你必须相信,当人们使用带指针的函数时,他们知道自己在做什么.如果他们将0x4211作为指针值传递给您,那么您必须信任它指向地址0x4211.如果他们"意外"击中了一个物体,那么即使你会使用一些可怕的操作系统功能(IsValidPtr或其他什么),你仍然会陷入一个错误,不会很快失败.

开始使用空指针来表示这种情况,并告诉库的用户,如果他们无意中传递了无效指针,就不应该使用指针,说真的:)

C++相关问答推荐

在C、Linux中同步进程

在x86汇编中,为什么当分子来自RDRAND时DIV会引发异常?

C:scanf(%d&q;,...)输入只有一个减号

GCC预处理宏和#杂注GCC展开

在c++中使用堆栈的有效括号

在C23中使用_GENERIC实现带有右值的IS_POINTER(P)?

使用scanf在C中读取和存储文件中的值

C代码在字符串中删除不区分大小写的子字符串的问题

为什么这个分配做得不好呢?

通过k&;r语法的c声明无效

Fprintf正在写入多个 struct 成员,并且数据过剩

从CentOS 7到Raspberry PI 2B的交叉编译-无法让LIBC和System Include标头一起工作

*S=0;正在优化中.可能是GCC 13号虫?或者是一些不明确的行为?

强制GCC始终加载常量(即只读),即使启用了优化

未为同一文件中的函数执行DirectFunctionCall

struct 中的qsort,但排序后的 struct 很乱

无法将字符串文字分配给 C 中的字符数组

SSE 向量与 Epsilon 的比较

C11 嵌套泛型

获取 struct 中匿名 struct 的大小