Đầu tiên, tôi tạo một int**
và thành công (tôi nghĩ) đã giải phóng nó như thế này:
cho (int i = 0; i < r; i++)
miễn phí(A[i]);
miễn phí (A);
Sau đó tôi đã tạo một int***
và cố gắng giải phóng nó bằng logic tương tự:
for (int i = 0; i < n_rows; i++) {
for (int j = 0; i < n_cols; j++) {
miễn phí(ma trận[i][j]);
}
miễn phí(ma trận[i]);
}
miễn phí (ma trận);
Nhưng tôi nhận được lỗi:
con trỏ được giải phóng không được phân bổ
Tôi đã sai ở đâu? Tôi đang cố gắng viết bài này ngắn gọn nhưng nếu nó bao gồm cách tôi tạo int***
Điều quan trọng là tôi có thể thêm nó.
EDIT, mã đầy đủ:
// Ma trận 3D chưa được khởi tạo
int*** malloc3Dmatrix(int n_rows, int n_cols, int deep) {
int *** ma trận;
ma trận = malloc(n_rows*sizeof(int**));
for (int row = 0; row < n_rows; row++) {
ma trận [hàng] = malloc(n_cols*sizeof(int*));
cho (int col = 0; col < n_cols; col++) {
ma trận [hàng] [col] = malloc(độ sâu*sizeof(int));
}
}
ma trận trả về;
}
// điền vào ma trận 3D
void fill3DMatrix(int ***matrix, int n_rows, int n_cols, int deep) {
printf("Chèn các phần tử của ma trận:\n");
for (int i = 0; i < n_rows; i++) {
for (int j = 0; j < n_cols; j++) {
for (int k = 0; k < độ sâu; k++) {
printf("Chèn phần tử [%d][%d][%d]: ", i, j, k);
scanf("%d", &matrix[i][j][k]);
printf("ma trận[%d][%d][%d]: %d\n", i, j, k, ma trận[i][j][k]);
}
}
}
return;
}
int chính(){
// tạo ma trận 3D chưa được khởi tạo
int n_rows = 3, n_cols = 3, độ sâu = 3;
int ***matrix = malloc3Dmatrix(n_rows, n_cols, deep);
// điền và in ma trận 3D
fill3DMatrix(ma trận, n_rows, n_cols, chiều sâu);
print3DMatrix(ma trận, n_rows, n_cols, chiều sâu);
// ma trận 3D miễn phí
for (int i = 0; i < n_rows; i++) {
for (int j = 0; i < n_cols; j++){
miễn phí(ma trận[i][j]);
}
miễn phí(ma trận[i]);
}
miễn phí (ma trận);
return 0;
}
Tôi là một lập trình viên xuất sắc, rất giỏi!