2017-08-14 89 views
-2

我不明白爲什麼這個代碼打破了,當我嘗試運行它。 我使用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

+5

你讀過陣列上的主題++教材? –

+2

你聲明數組只有1元,然後你試圖寫一個值到它一個基本的C是6'th元素它顯然不起作用 – litelite

+1

'arr'是自動分配的,大小爲0,它不是動態的。在你的例子中,數組的大小需要知道,所以你可以寫'int arr [6];'。你最終會遇到這樣一種情況:在運行前你不一定知道數組的大小,你可以看看'std: :VECTOR'。 – George

回答

5

int arr[] = {0};聲明在它恰好一個要素的數組。因此,該數組中唯一有效的索引是arr[0]。試圖用任何非零整數索引都會導致未定義的行爲。

+0

謝謝,夥計! –

+0

好點。我已經更新了答案。 – user1413793

0

需要

int arr[6]; 

6個元素

0

誤差在於行聲明的數組: INT一個[] = {0}; 通過這個,你創建了一個只包含一個元素的數組,然後你試圖訪問6個元素。將上面的行替換爲: int a [6] = {0};

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;              
}                 
+0

不知道downvote是關於什麼,但我有一個小問題:C++定義動態存儲的方式不需要堆。堆是一種常見的實現,可能大多數程序員都會看到,但這不是唯一的實現。 – user4581301

相關問題