分段故障二维数组

时间:2016-03-31 04:57:08

标签: c++

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

     /// <reference path="../typings/jquery/jquery.d.ts" />
     /// <reference path="../typings/angularjs/angular.d.ts" />
     var app = angular.module('app', ['ngMaterial', 'ngMessages', 'material.svgAssetsCache']);

     export interface IAppController {
        someFunc: (index:number) => void;
     }

     /*export*/ class AppController implements IAppController {
        static $inject = ["$scope", "$mdDialog"];    
        private $scope : any; 
        private $mdDialog : any;        
        constructor($scope, $mdDialog) {  
           this.$scope = $scope;     
           this.$mdDialog = $mdDialog;
        };    
        someFunc(index) {
              //...
           };
     }

     app.controller('appCtrl', AppController);

错误是: “ 多少行? 3 多少个colomns 3 分段故障(核心转储) “

4 个答案:

答案 0 :(得分:1)

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

array[i][0]= x;

第一个索引是行,第二个是col。

后期cout << array[row][col];也因row超出范围而绞尽脑筋。

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

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

答案 1 :(得分:0)

cout << array[row][col];

正如其他人所说的那样,这两个维度的范围都超出范围。

for(i=0; i<row; i++){

delete [] array[i];
delete [] array;
}

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

答案 2 :(得分:0)

所以它应该是这样的?

#include<iostream>


using namespace std;


int main(){

   int col, row,i;
   int **array;

   cout << "How many rows?\n";
   cin >> row;
   cout << "How many colomns\n";
   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;
}

答案 3 :(得分: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++;
}