我是编程的新手,我正在尝试理解二维数组。我写了这段代码来测试我的代码,看它是否有效。不幸的是,我收到了分段错误。我知道这意味着我写的东西对编译器来说是不可读的,但我不知道它是什么。因为一切对我来说都很好
/// <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
分段故障(核心转储)
“
答案 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
始终为1
,x++
无效。
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++;
}