【发布时间】:2016-03-31 04:57:07
【问题描述】:
我是编程新手,我正在尝试理解二维数组。我写这段代码只是为了测试我的代码,看看它是否工作。不幸的是,我遇到了分段错误。我知道这意味着我写的东西对于编译器来说是不可读的,但我不知道它是什么。因为在我看来一切都很好。
#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;
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 分段错误(核心转储) "
【问题讨论】:
-
cout << array[row][col];超出范围。array[row-1][col-1]尽你所能。 -
x++;什么都不做; x 在每次循环迭代结束时超出范围,并在下一次迭代开始时重新创建。
-
现在我们在 C++ 中很少使用指针和数组以及 new 和 deete。有更健康的选择,例如 std::vector 和 std::shared_ptr。
标签: c++