01/10/2018, 09:09
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;
}
Bài liên quan
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ứ.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
Tham chiếu là một trong những first-class object của C++ đấy
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.
là kiểm tra xem phát động thành công hay không đó