2015-07-05 35 views
-6

這裏是我的代碼,這是造成此錯誤:我得到「分段錯誤」取消引用特定索引。如何解決它?

int *marks[4]; 
    cout<<"\nPlease enter marks of PF: "; 
    cin>>*marks[0]; 
    cout<<"\nPlease enter marks of LA: "; 
    cin>>*marks[1]; 
    cout<<"\nPlease enter marks of CS: "; 
    cin>>*marks[2]; 
    cout<<"\nPlease enter marks of Phy: "; 
    cin>>*marks[3]; 
    cout<<"\nPlease enter marks of Prob: "; 
    cin>>*marks[4]; 

我進入前兩個值進行標記後得到這個錯誤[0] &標記[1]。

+7

1.您沒有爲整數分配內存。 2. *標記[4]超出界限。 3.你真的需要一個動態數組嗎? – drescherjm

+0

您應該回答這個問題 –

+0

現在沒有任何特定的任何移除標籤。 –

回答

2

如果你聲明

int *marks[4]; 

,這並不意味着有分配給該陣列中的特定指針適當的一塊內存。

你要分配內存,之前你可以寫有使用像

cin >> *marks[0]; 

一份聲明中分配內存一樣如下:調用cin <<操作之前

for(size_t i = 0; i < 4; ++i) { 
    marks[i] = new int(); 
} 


不要忘記解除分配,它不應該被使用後不再:

for(size_t i = 0; i < 4; ++i) { 
    delete marks[i]; 
} 

的可能是更好的解決辦法是使用std::array<int,[size compiletime determined]>std::vector<int>

std::vector<int> marks; 

取決於您是否需要固定大小的陣列或動態分配的陣列,您可以使用

const int fixed_array_size = 30; 
std::array<int,fixed_array_size> marks; 

size_t array_size = 0: 
std::cin >> array_size; 
std::vector<int> marks(array_size); 
相關問題