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

时间:2017-08-14 18:10:45

标签: 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 <<"] = " << arr[y] << endl;

    return 0;
}

输出: enter image description here

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

你需要

int arr[6];

声明一个包含6个元素的数组

答案 2 :(得分:0)

错误在于:     int a [] = {0}; 通过这个你创建了一个只包含一个元素的数组,之后你试图访问6个元素。将上述行替换为:     int a [6] = {0};

答案 3 :(得分:0)

因此,有几种方法可以实现您的目标。有些是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;                                                     
}