“数组索引越界”的 Visual Studio 等效错误

Posted

技术标签:

【中文标题】“数组索引越界”的 Visual Studio 等效错误【英文标题】:Visual studio equivalent error for "array index out of bounds" 【发布时间】:2016-08-03 00:01:45 【问题描述】:

我们有一个从 Visual Studio 构建的 GCC makefile 项目。我之前发布过关于visual studio not interpreting GCC errors and warnings here 的问题。

我们想将-Werror 标志添加到 GCC 以确保我们的代码中不会出现警告。不幸的是,仍然有一些未解决的警告,所以我们的构建失败了。一个例子如下:

在 GCC 中,我们得到以下信息:

错误:数组下标超出数组边界

正因为如此,当最后在 Visual Studio 中构建时,我们会得到:

1>  stl_vector.h: In constructor 'RobotController()':
1>  stl_vector.h(1043,1) : error: array subscript is above array bounds
1>  stl_vector.h: In constructor 'RobotController()':
...   
1>  make[1]: *** [exe/obj/controller.o] Error 1
1>  make: *** [compilation] Error 2
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

这向所有后期构建事件表明构建成功。

我可以将其转换为“数组索引超出范围”的等效 Visual Studio 警告或错误吗?

目的是报告对用户有意义的错误。 注意:警告本身在这里不是问题,将单独修复,我们只是想以 Visual Studio 理解的方式正确报告此类错误。

【问题讨论】:

你能发个minimal reproducible example吗? 顺便说一句,发布的代码是正确的,并且不应自行产生该警告。我猜有其他产生警告的东西的干扰。我知道这是因为这段代码不包含数组下标 你能发布 RobotController() 构造函数吗? 你检查了第 1043 行吗? 1043 是产生错误的行。我认为你应该检查一下。如果它是一个广泛使用的库,并不意味着它没有错误。由于结构的大小在编译时是已知的,它可能会尝试某种优化技巧。 【参考方案1】:

https://msdn.microsoft.com/en-us/library/ms182089.aspx

警告C6386:缓冲区溢出:访问<buffer name>,可写大小为<size1>字节,但可以写入<size2>字节:行:x,y

请注意,这只能通过启用静态代码分析工具来捕获。

【讨论】:

以上是关于“数组索引越界”的 Visual Studio 等效错误的主要内容,如果未能解决你的问题,请参考以下文章

奇怪的数组索引越界异常

为啥python的列表切片不会产生索引越界错误? [复制]

越界异常和空指针异常

数组操作的两个常见小问题越界和空指针

Visual Studio 2012 与 Visual Studio 2010 (delta) [关闭]

powershell PowerShell脚本删除Visual Studio,ReSharper等生成的文件...