Ana*_*tts 12
是的,你得到一个指向0x1的指针的原因很可能是因为你要取消引用一个指向null的结构:
struct some_struct* ptr = NULL;
char blah = ptr->foo;
Run Code Online (Sandbox Code Playgroud)
它发生foo在距结构开始的偏移1处.所以数学结束了*(0+1).
pax*_*blo 10
可能不是.在源中指示NULL值,0因此检查0x1NULL是否将返回false.
恢复的方法(从技术上讲,恢复是不合理的,你真的需要防止)将假设0x1与NULL一样糟糕,并且在这种情况下不尝试使用它,例如:
if ((p == 0) || (p == 0x1))
return;
// Otherwise use p.
Run Code Online (Sandbox Code Playgroud)
但是,我非常犹豫地称这优雅.在正确的做事情是追查是什么引起的指针被设置为无效值,并修复它.
当有人用锤子砸你的头部时,这类似于停止头痛.你可以拿一个平板电脑来缓解头痛,但肯定最好找出问题的根本原因(停止锤击).