【问题标题】:How to boundary check in gcc / mingw?如何在 gcc / mingw 中进行边界检查?
【发布时间】:2011-03-02 04:09:15
【问题描述】:

试过了

int main(void) {

int a[10]; a[20]=5;

}

gcc -Wall -O2 main.c

它没有给我任何警告......

它是 windows (mingw) 内的 gcc,我无法检测到这种边界限制错误

如何告诉编译器检查它? mingw可以吗?

谢谢

【问题讨论】:

标签: c memory-management mingw boundary


【解决方案1】:

这个问题已经很老了,但我想我在这里得到了另一个答案。即使您打算在 gcc 上进行完整构建,您也可以尝试使用 clang 编译器(例如,对于大型项目中的夜间构建)。效果很好。

一个例子是当我尝试访问数组大小被声明为 4 的索引 4 时的输出:

    ex9.c:17:2: warning: array index 4 is past the end of the array (which contains
          4 elements) [-Warray-bounds]
            numbers[4] = 4;
            ^       ~
    ex9.c:4:2: note: array 'numbers' declared here
            int numbers[4] = {0};
            ^

谢谢 卡哈尔

【讨论】:

    【解决方案2】:

    还有其他非编译器工具可以使用静态分析来查找数组边界违规等错误。以前的SO question 讨论了其中一些。请注意,如果您需要在可能会限制您的选择的 mingw 环境中运行。

    【讨论】:

      【解决方案3】:

      尝试处理数组边界检查。默认情况下,标准 C99 没有说明强制数组边界,我认为主要是因为它有更多的开销。

      话虽如此,您可以查看人们尝试处理的此类网站:

      http://williambader.com/bounds/example.html

      【讨论】:

      猜你喜欢
      • 2011-08-01
      • 1970-01-01
      • 2015-09-02
      • 2015-10-13
      • 1970-01-01
      • 1970-01-01
      • 2012-12-23
      • 2011-05-27
      • 2015-07-06
      相关资源
      最近更新 更多