非常奇怪的C++;错误 当我编写代码时遇到了一个非常奇怪的问题,这里是我的C++代码: #include <iostream> using namespace std; int main() { int qnum; cin >> qnum; int series[3]; cin >> series[3]; cout << qnum; } #包括 使用名称空间std; int main() { int-qnum; cin>>qnum; int系列[3]; cin>>系列[3]; cout>qnum; int系列[3]; cin>>系列[3]; cout

非常奇怪的C++;错误 当我编写代码时遇到了一个非常奇怪的问题,这里是我的C++代码: #include <iostream> using namespace std; int main() { int qnum; cin >> qnum; int series[3]; cin >> series[3]; cout << qnum; } #包括 使用名称空间std; int main() { int-qnum; cin>>qnum; int系列[3]; cin>>系列[3]; cout>qnum; int系列[3]; cin>>系列[3]; cout,c++,C++,没有系列[3]。只有系列[0]、系列[1]和系列[2](数组从0到N-1) 您正在注销数组的结尾,这会导致未定义的行为。没有系列[3]。只有系列[0]、系列[1]和系列[2](数组从0到N-1) 你正在写数组的末尾,这导致了不确定的行为。你在0开始计算C++。所以最后一个有效的索引是系列[2 ]。你应该编译你的代码,使所有警告都能被激活。每个体面的编译器都应该警告这样的事情。@ PMR:取决于你对一个“正派”的定义。我想,编译器.GCC不支持-Wall-Wextra(不过,也许还有其他更模糊的标

没有
系列[3]
。只有
系列[0]
系列[1]
系列[2]
(数组从0到N-1)


您正在注销数组的结尾,这会导致未定义的行为。

没有
系列[3]
。只有
系列[0]
系列[1]
系列[2]
(数组从0到N-1)


你正在写数组的末尾,这导致了不确定的行为。

你在0开始计算C++。所以最后一个有效的索引是系列[2 ]。你应该编译你的代码,使所有警告都能被激活。每个体面的编译器都应该警告这样的事情。@ PMR:取决于你对一个“正派”的定义。我想,编译器.GCC不支持
-Wall-Wextra
(不过,也许还有其他更模糊的标志可以检测到这一点)“OLICHARLSVESY奇怪”,在这种情况下它不会发出警告,但是它警告您的设置和<代码> -O2分配。您在C++中计数为0。所以最后一个有效的索引为系列[2 ]。您应该在启用所有警告的情况下编译代码。每个体面的编译器都应该警告类似的内容。@pmr:我想这取决于您对“体面”编译器的定义。GCC不使用
-Wall-Wextra
(尽管可能还有其他更模糊的标志来启用此检测)@OliCharlesworth奇怪。在这种情况下,它不会发出警告,但会使用您的设置和作业发出警告。
-O2
。感谢您的回答,我是新手,很抱歉问了这么愚蠢的问题。噢,突然,我知道某个地方有缓冲区覆盖,但我没有注意到他正在向3计数数组的第四个元素写入内容。谢谢您的回复回答,我是个新手,很抱歉问了这么愚蠢的问题。哦,天哪,我知道这是缓冲区覆盖,但我没有注意到他在写3计数数组的第四个元素。
#include <iostream>
using namespace std;

int main()
{
    static int qnum;
    cin >> qnum;
    int series[3];
    cin >> series[3];
    cout << qnum;
}