C++ 数组的简单代码给了我一个运行时错误

C++ 数组的简单代码给了我一个运行时错误,c++,gcc,C++,Gcc,我无法理解为什么在我尝试运行它时,此代码会中断。 我使用GCC编译器 #include <iostream> using namespace std; int main() { int arr[] = {0}; for(int x=0; x<6; x++) arr[x] = x; for(int y=0; y<6; ++y) cout<< "arr[" << y <<"] =

我无法理解为什么在我尝试运行它时,此代码会中断。 我使用GCC编译器

#include <iostream>
using namespace std;

int main() {

    int arr[] = {0};

    for(int x=0; x<6; x++)
        arr[x] = x;
    for(int y=0; y<6; ++y)
        cout<< "arr[" << y <<"] = " << arr[y] << endl;

    return 0;
}
#包括
使用名称空间std;
int main(){
int arr[]={0};

for(int x=0;x
int arr[]={0};
声明一个数组,其中只有一个元素。因此,该数组中唯一有效的索引是
arr[0]
。尝试按任何非零整数进行索引将导致未定义的行为。

您需要

int arr[6];

要声明包含6个元素的数组,错误在以下行中: int a[]={0}; 通过此操作,您创建了一个仅由一个元素组成的数组,稍后您将尝试访问6个元素。将上述行替换为:
有一种方法可以实现你想要做的事情。有几种方法可以实现你的愿望。有些是C风格的,有些是用C++ STL容器的。我用4种不同的方式重新编写代码来显示差异。C静态大小的数组和C++静态大小的类(编译时必须知道大小),C动态大小数组。(这些将被分配到堆上,C++动态大小向量)。
#include <iostream>                                               
#include <vector>                                                 
#include <array>                                                  

using namespace std;                                              

int main() {                                                      

    // C style Static sized array                                 
    int arr_sty_1[6];                                             
    for(int x=0; x<6; x++)                                        
        arr_sty_1[x] = x;                                         
    for(int y=0; y<6; ++y)                                        
        cout<< "arr_sty_1[" << y <<"] = " << arr_sty_1[y] << endl;

    // C++ style Static sized array                               
    array<int, 6> arr_sty_2;                                      
    for(int x=0; x<6; x++)                                        
        arr_sty_2[x] = x;                                         
    for(int y=0; y<6; ++y)                                        
        cout<< "arr_sty_2[" << y <<"] = " << arr_sty_2[y] << endl;

    // C style dynamic sized array                                
    int* arr_sty_3 = new int[6];                                  
    for(int x=0; x<6; x++)                                        
        arr_sty_3[x] = x;                                         
    for(int y=0; y<6; ++y)                                        
        cout<< "arr_sty_3[" << y <<"] = " << arr_sty_3[y] << endl;

    // C++ style dynamic size vector (dynamic array ish)          
    vector<int> arr_sty_4;                                        
    for(int x=0; x<6; x++)                                        
        arr_sty_4.push_back(x);                                   
    for(int y=0; y<6; ++y)                                        
        cout<< "arr_sty_4[" << y <<"] = " << arr_sty_4[y] << endl;

    return 0;                                                     
}                                                                 
#包括
#包括
#包括
使用名称空间std;
int main(){
//C型静态大小数组
int arr_sty_1[6];

对于你是否已经阅读了一个关于数组的C++基础教科书?你在声明一个只有1个元素的数组,然后你试图写一个值到它的第6个元素。它显然不会工作。<代码> ARR < /C>自动分配,大小为0,它不是动态的。在你的例子中,数组的大小需要知道。只能写
int-arr[6]如果你最终遇到了一个你不一定知道数组大小的情况,你可以先看一下 STD::vector < /Cord>。不知道下一个投票是什么,但是我有一个小的黑板:C++定义了动态存储,这样就不需要堆了。堆是一个通用的实现,很可能是所有的MOS。t程序员永远不会看到,但它不是唯一的实现。