二维数组分割错误

Segmentation fault two dimensional array

本文关键字:错误 分割 二维数组      更新时间:2023-10-16

我是编程新手,我正在努力理解二维数组。我写这段代码只是为了测试我的代码,看看它是否有效。不幸的是,我得到了一个分割错误。我知道这意味着我写的东西对编译器来说是不可读的,但我不知道它是什么。因为对我来说一切都很好。

#include<iostream>

using namespace std;

int main(){
   int col, row,i;
   int **array;
   cout << "How many rows?n";
   cin >> row;
   cout << "How many colomnsn";
   cin >> col;
cout << "!!!!!!!!!!!!";
   array = new int*[row];
   for (int i = 0;i<row;i++){
          array[i] = new int[col];
   }   
        cout << "!!!!!!!!!!!!";
   for( i=0; i<row; i++){
        int x=1;
      array[0][i]= x;; 
   x++;
   }   
        cout << "!!!!!!!!!!!!";
   cout << array[row][col];
   for(i=0; i<row; i++){
   delete [] array[i];
   delete [] array;
   }   
   return 0; 
}

错误为:"有多少行?3.多少科隆3.分段故障(堆芯倾倒)"

array[0][i]= x;看起来不对。应该是:

array[i][0]= x;

第一个索引用于行,第二个索引用于列。

随后的CCD_ 2也由于CCD_。

删除数组的方式也是错误的,应该是:

for(i=row - 1; i >= 0; --i){
  delete [] array[i];
}
delete [] array;
cout << array[row][col];

正如其他人所说,在两个维度中的每一个维度都超出了范围。

for(i=0; i<row; i++){
delete [] array[i];
delete [] array;
}

您要删除数组的元素三次,每个元素一次。这很好。您还将删除数组本身三次。这是危险和错误的。

所以它应该是这样的?

#include<iostream>

using namespace std;

int main(){
   int col, row,i;
   int **array;
   cout << "How many rows?n";
   cin >> row;
   cout << "How many colomnsn";
   cin >> col;
   array = new int*[row];
   for (int i = 0;i<row;i++){
          array[i] = new int[col];
   }   
        cout << "!!!!!!!!!!!!";
   for( i=0; i<row; i++){
        int x=1;
      array[i][0]= x;; 
   x++;
   }   
        cout << "!!!!!!!!!!!!";
   for(i=0; i<row; i++){
        for(int j=0; j<col; j++){
           array[i][j];
        }   
   }   
    cout << array[row][col];    
   for(i=0; i<row; i++){
   delete [] array[i];
   delete [] array;
   }   
   return 0;
}

此行超出范围cout << array[row][col];。如果要打印最后一个元素,请将此行更改为cout << array[row-1][col-1];

正如其他人提到的,下面是删除分配的内存的代码

for(i=0; i <row; i++){
    delete [] array[i];       
}
delete [] array;

同样,在您的代码中,x总是1x++是无效的。

for( i=0; i<row; i++){
 int x=1;      
 array[0][i]= x; 
 x++;
}

如果要为每行递增x,则在循环外初始化x像这个

int x=1; 
for( i=0; i<row; i++){     
  array[0][i]= x;; 
  x++;
}