【发布时间】:2021-10-21 22:27:43
【问题描述】:
我正在制作一个 cpp 程序,它从用户那里获取两个输入,确定二维数组的大小并将值传递给 mat 类构造函数并动态创建用户的数组定义的大小。但是,我不知道为什么它不起作用并显示 segmentation fault
#include<iostream>
using namespace std;
class mat{
int **a;
int r, c;
public:
mat(int row, int col){
r = row;
c = col;
for(int i = 0; i < r; i++){
*a = new int[r];
*a++;
}
}
void input(){
for(int i = 0; i < r; i++){
for(int j = 0; i < c; j++){
cin >> a[i][j];
}
}
}
void display(){
for(int i = 0; i < r; i++){
for(int j = 0; i < c; j++){
cout << a[i][j] << "\t";
}
cout << endl;
}
}
};
int main()
{
int r, c;
cout << "enter row :";
cin >> r;
cout << "enter column :";
cin >> c;
mat m(r, c);
m.input();
cout << "array \n";
m.display();
}
我感觉问题出在构造函数中的 for 循环上,或者我做错了。
【问题讨论】:
-
你需要初始化
a。 -
由于 a、r 和 c 是私有的,您可以使用平面
vector<int> a并使用r * c计算其一维大小。然后在从 2D 坐标访问 1D 矢量时将 2D x,y 转换为x + y * c。 -
您分配内存只是为了保存大小为 r 的指针数组,但您从未分配任何内存来保存这些指针指向的实际数据。
-
这能回答你的问题吗? stackoverflow.com/questions/936687/…
-
当你做
*a = new int[r];时,你认为a在指向什么? (一旦你解决了这个问题,你认为循环结束时它指向什么?)
标签: c++