我正在制作一個 cpp 程式,它從用戶那里獲取兩個輸入,確定二維陣列的大小,并將值傳遞給mat類建構式,并動態創建用戶定義大小的陣列。但是,我不知道為什么它不起作用并顯示分段錯誤
#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 回圈上,或者我做錯了。
uj5u.com熱心網友回復:
該類包含多個錯誤。
- 變數
a永遠不會被初始化。當我們嘗試尋址指向的記憶體時,a我們會遇到分段錯誤。我們可以這樣初始化a = new int*[r] - 我們不應該改變
a指向的位置,所以不要使用a. 否則a[i][j]不會參考第 i 行和第 j 列。我們還想在某個時候釋放記憶體。 - 列的內部回圈
for(int j = 0; i < c; j )一旦進入就永遠不會終止,最終會產生分段錯誤。我們需要更改i < c為j < c.
如果我們修復這些錯誤,它看起來像這樣:
class mat {
int** a;
int r, c;
public:
mat(int row, int col) {
r = row;
c = col;
a = new int*[r];
for (int i = 0; i < r; i ) {
a[i] = new int[c];
}
}
void input() {
for (int i = 0; i < r; i ) {
for (int j = 0; j < c; j ) {
cin >> a[i][j];
}
}
}
void display() {
for (int i = 0; i < r; i ) {
for (int j = 0; j < c; j ) {
cout << a[i][j] << "\t";
}
cout << endl;
}
}
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/329648.html
標籤:C
