Phát động mảng 2 chiều

Mình đang vọc về con trỏ, có thử cấp phát động mảng 2 chiều thì sai ở hàm X. Tại sao nó lại sai vậy mọi người ?

#include <iostream>
#include <cstdlib>
using namespace std;
//========prototype================
void X(int **arr, int row);
void initArr2d(int **arr,int row,int col);
void deleteArr2d(int **arr,int row,int col);

//==============================================
int main() {
    int **arr = NULL;
    int row = 3;
    X(arr, row);
    cout << "XXXXXX" << endl;
    initArr2d(arr, row, row);
    cout << "XXXXXX" << endl;
    deleteArr2d(arr, row, row);
    cout << "XXXXXX" << endl;
}
// ===============function======================
void X(int **arr, int row) {
    if ( (arr = new int*[row]) == 0) {
        cout << "No suficient memory.";
        exit(1);
    }
}
void initArr2d(int **arr,int row,int col) {
    for (int i = 0 ; i < row ; i++)
    {
        if ( (arr[i] = new int[col]) == 0 )
        {
            cout << "No sufficient memory.";
            exit(1);
        }

    }
}

void deleteArr2d(int **arr,int row,int col) {
    for (int i = 0 ; i < row ; i++)
        delete [] arr[i];
    delete [] arr;
}

Lỗi ở hàm initArr2d chứ, mình thử cho hàm X vào main thì chạy được, nhưng thành hàm thì lại lỗi.

Hình như cái này liên quan gì đó đến “tham biến” và “tham trị” thì phải.
Hàm mà muốn làm thay đổi biến đầu vào thì phải có “&”, kiểu như void initArr2d(&int **arr, int row, int col), lúc gọi hàm thì initArr2d(&arr, row, row);.

Prototype phải ghi int& chứ.

2 Likes

ahjhj, mình không biết cái này, chỉ biết void initArr2d(int[][] ref arr, int row, int col) thôi :))
Thảo nào lúc phải dùng C++ để viết cái chương trình mô phỏng chết tiệt, mình viết mãi cái hàm không được, thằng bạn sửa cho mà chả biết nó sửa chỗ nào :expressionless:

1 Like

Tham chiếu là một trong những first-class object của C++ đấy :slight_smile:

1 Like

Bác ơi em cũng đang học đến con trỏ, cho em hỏi cái dòng if ( (arr = new int*[row]) == 0) có ý nghĩa gì vậy bác, em đọc mà không hiểu :((

Phải thêm nothrow nữa mới đúng.

1 Like

là kiểm tra xem phát động thành công hay không đó

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?