【发布时间】:2013-09-18 03:02:55
【问题描述】:
我不想处理分段错误。我或多或少地了解异常处理的工作原理。我宁愿一开始就没有错。我想要做的是调用一个函数或执行一个操作,该操作返回一个值,告诉我该特定内存位置/块是否可访问,而无需实际访问它并得到错误。
也就是说,我想要一个 C 函数在实际访问它之前探测 Linux 和/或 Mac OS X 中的地址。比如:
result = probe_memory(address,length)
结果在哪里
0 = writable
1 = read-only
-1 = nonexistent
或类似的东西。
在 Linux 和/或 Mac OS X 中有类似的东西吗?
【问题讨论】:
-
想解析 TLB 吗?
-
对于动态分配的内存(通过
malloc()等分配),请考虑 Steve Maguire 在 Writing Solid Code 中描述的技术。 (另外请注意,有些人强烈反对书中所说的任何内容——您可以在 ACCU 网站以及其他地方找到此类评论。) -
在 Linux 上,您可能能够从
/proc/self/maps中提取一些信息,但如果这不仅仅是出于好奇……如果您需要询问,您可能做错了什么地址是否有效。 -
@user157426:那么使用类似 valgrind 的东西怎么样?这实际上会捕获更难发现的错误——比如不会导致段错误的内存损坏。
-
是的,这看起来像我正在寻找的东西。我要求一个例程,但一个包也可以。它似乎可用于 linux 和 mac,这正是我所需要的。我可以试一试。
标签: c linux macos segmentation-fault