“数组索引越界”的 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 等效错误的主要内容,如果未能解决你的问题,请参考以下文章