2016-04-18 2 views
-3

Когда я пытаюсь скомпилировать приведенный ниже код, говорит stack smashing detected abc2 terminated Aborted (core dumped). Эта ошибка показывает, что для цикла, проходящего через двумерный массив .«обнаружение стека обнаружено abc2 завершено« Прервано »отображается при циклировании массива

Что я хочу сделать, так это получить вход пользователя в первый столбец, используя cin>>arr[0][i]; и 0 для всех других столбцов, используя arr[i+1][r]=0;.

#include <iostream> 

    using namespace std; 

    void displayArray(int arr[][4],int row,int col); 
    int main(){ 
    int arr[3][4]; 
    for(int i=0;i<4;i++){ 
      cout<<"enter value "; 
      cin>>arr[0][i]; 
      for(int r=0;r<3;r++){ 
        arr[i+1][r]=0; 
      } 
    } 



      displayArray(arr,3,4); 

      return 0; 
    } 

    void displayArray(int arr[][4],int row,int col){ 
      for(int i=0;i<row;i++){ 
        for(int r=0;r<col;r++){ 
          cout<<arr[i][r]<<" "; 
        }cout<<endl; 
      } 

    } 
+1

Пожалуйста, переформатируйте код. Вы также можете добавить дополнительную информацию. Когда происходит разбиение стека? – exilit

+1

arr [i + 1] [r] = 0; «+1» не имеет для меня столь большого смысла. – Marco

+0

@ Марко это имеет смысл прямо сейчас. – Blasanka

ответ

2

Вы собираетесь за пределами вашего массива здесь:

int arr[3][4]; 
for(int i=0;i<4;i++){ 
//... 
    arr[i+1][r]=0; // <-- i+1 when i == 2 is going to give trouble 
//... 
} 

Если i >= 2, вы пишете arr[3], arr[4] и т.д. Это перезапись памяти и поведение становится неопределенным ,

Очевидно, что исправление предназначено либо для дроссельной заслонки назад, так что i всегда меньше 2 или требуется, чтобы первое измерение вашего массива было увеличено с 2 до большего числа.

Смежные вопросы