1

有没有any办法我可以对字符缓冲区施加大小限制,这样缓冲区上的任何操作都不会导致越界访问?

4

4 回答 4

3

简而言之:没有

C 不执行任何运行时检查,除非您手动进行。

您可以使用自己的函数、宏和每个缓冲区的簿记来防止无效访问。但是,您必须在任何地方都使用此接口,这意味着您将无法直接访问该缓冲区。

由于额外的条件检查,您还会看到对性能的影响。您可以通过对已证明不会导致越界访问的代码分支使用直接访问来避免其中的一些问题。

编辑:

还有一个相当重要的问题是“一旦检测到无效访问,代码应该做什么”。您的程序是否应该输出错误并退出,就好像遇到其他语言的异常一样?它应该忽略错误吗?它应该尝试修复它吗?

处理这个问题的 C 方法是先查看,然后再确保每个代码分支/部分是事先安全的,而不是检查每个访问。

于 2011-01-17T14:03:22.327 回答
1

请参阅我们的内存安全检查器,它用作调试辅助工具,检测您的 C 代码以确定您是否在数组或缓冲区中出现任何错误。这会发现 valgrind 无法解决的问题。

于 2011-03-10T15:06:38.890 回答
1

这可能会有所帮助:http ://duma.sourceforge.net/在您的任务中。

于 2011-01-17T14:08:01.510 回答
1

简短的回答:不。

长答案:
为了确保即使是愚蠢的事情buffer[ULLONG_MAX]也不会超出界限,您需要声明缓冲区的界限大于系统上可表示的最大整数。除了这种缓冲区需要的内存量之外,这显然是不可能的。

实际的解决方案是您手动跟踪缓冲区的大小,并根据缓冲区大小验证对缓冲区的任何不受信任的索引。

于 2011-01-17T14:08:46.057 回答