C++ 关于使用范围外变量内存的编译器警告

C++ 关于使用范围外变量内存的编译器警告,c++,compiler-warnings,memory-access,C++,Compiler Warnings,Memory Access,在我前面的问题()中,答案是“因为您访问了超出范围的变量的内存” 在大多数编译器(Visual C++、GCC和CLAN)中,一般存在关于这种不正确的内存访问的编译器警告? ?不,这样做很难他们不能。@AlanStokes试过什么?Visual C++和GCC不使用默认设置来警告它。一般来说,编译器并不擅长给出这种提示,因为这纯粹是一个运行时问题(编译器甚至没有看到)。在某些情况下,In可以检测到它们。有时您会收到警告,有时编译器会使用这些信息来大幅优化代码。有时,编译器不会注意到,您会遇到大麻

在我前面的问题()中,答案是“因为您访问了超出范围的变量的内存”


<>在大多数编译器(Visual C++、GCC和CLAN)中,一般存在关于这种不正确的内存访问的编译器警告?

?不,这样做很难他们不能。

@AlanStokes试过什么?Visual C++和GCC不使用默认设置来警告它。一般来说,编译器并不擅长给出这种提示,因为这纯粹是一个运行时问题(编译器甚至没有看到)。在某些情况下,In可以检测到它们。有时您会收到警告,有时编译器会使用这些信息来大幅优化代码。有时,编译器不会注意到,您会遇到大麻烦。@AlanStokes我的意思是有编译器命令行开关来启用它吗?也许有人知道。下面是投票人,他们的神奇的通用编译时悬挂引用检测器。@LightnessRacesinOrbit好吧,公平地说,如果能找到可用的SCA工具,那就太好了。我发现C。。。。(等等,没有详细说明,没有商业产品广告)检测到的东西具有合理的误报率。@LightnessRacesinOrbit当然,但你说这是难以解决的,这不是完全正确的,并且被一些有用的工具证明了。我会在我的回答中补充这一点。不是,我无论如何都同意@stefan对你的态度。@LightnessRacesinOrbit在一般情况下是的,你是绝对正确的(当然是在编译时阶段)。但事实上,有许多静态代码分析工具(包括非商业工具),它们可以很好地检测可能的越界读取或其他未定义的行为检测。我们最近从K。。。对C…,由于较好的假阳性率,以及追踪功能。它仍然需要人类的反省和分类,但对于发现此类错误非常有帮助。各位,让我们停止评论中的人身攻击。我已经整理好了,但是让我们把重点放在技术问题上。