如何识别无效的内存地址?

deb*_*tro 3 c linux memory

我想知道是否有某种方法可以在特定平台上识别无效的内存地址(x86 64位,对于我的情况).在取消引用地址并抛出SIGILL/SIGSEGV错误之前,我需要它来捕获程序.

Rud*_*uis 5

一般来说,你不能.无效地址看起来与有效地址非常相似.唯一可识别的无效地址是NULL.

因此,请确保(因此编写代码)您的指针有效或NULL在使用它们之前.永远.没有办法解决这个问题.

您可以使用工具来检测指针可能无效的位置(例如,未初始化,已经释放等),但这不是您要求的.

  • 我对Linux知之甚少,但肯定至少有一种方法可以确定给定进程可以访问的地址空间是什么?这样您至少可以确定指针是否对本地.stack .data或.bss段有效? (2认同)