30/09/2018, 20:46
Cấp phát động mảng 2 chiều không được
#include <stdio.h>
#include <stdlib.h>
void capPhat(int **a, int dong, int cot){
a = new int* [dong];
for (int i = 0; i < dong; i++)
a[i] = new int [cot];
}
void thuHoi(int **a, int dong, int cot){
for (int i = 0; i < dong; i++){
delete[] a[i];
}
delete[] a;
}
void nhapM(int **a, int dong, int cot){
for (int i = 0; i < dong; i++)
for (int j = 0; j < cot; j++){
printf("Nhap phan tu thu [%d][%d]: ", i,j);
scanf("%d",&a[i][j]);
}
}
void xuatM(int **a, int dong, int cot){
for (int i = 0; i < dong; i++){
for (int j = 0; j < cot; j++)
printf("%d",a[i][j]);
printf("
");
}
}
int main(){
int **a, dong, cot;
printf("Nhap so dong: ");
scanf("%d",&dong);
printf("Nhap so cot: ");
scanf("%d",&cot);
capPhat(a,dong,cot);
printf("%d",sizeof(a));
nhapM(a,dong,cot);
xuatM(a,dong,cot);
thuHoi(a,dong,cot);
return 0;
}
Mình đã kiểm tra nhiều lần nhưng không biết sai ở đâu mà code chạy không được.Mọi người xem giúp.
Bài liên quan
Sửa lại nhé. Markdown không hết code
phải truyền tham chiếu (reference) hay truyền đích thị con trỏ
a
vô hàmcapPhat
.thêm có 1 ký tự
&
phía trướca
thôi:void capPhat(int ** &a, int dong, int cot)
cách viết cũ thì
a
truyền vàocapPhat
là bản sao của con trỏa
trongmain
. Thêm dấu&
thì mới truyền bản chính.Cảm ơn. Nhưng ban có thể giải thích cụ thể giùm mình được không? Mình nghỉ nó đã là con trỏ sẳn rồi nên không cần dấu ‘&’ nữa chứ.
kiểu của
a
làint **
, bạn xemint **
như là 1 kiểu ví dụppInt
vậy. Nếu vậy thìvoid capPhat(int **a, ...
tương đương vớivoid capPhat(ppInt a, ...
. Nhưng trong hàmcapPhat
thìa
lại được gána = new ...
nên giá trị củaa
thay đổi nêna
cần phải truyền theo tham chiếu:void capPhat(ppInt& a, ...
ví dụ hàm
void nhanHai(double x) { x = 2*x; }
thìx
cũng được gánx = ...
nhưngx
ko được truyền tham chiếu nên gọinhanHai(a)
trongmain
thìa
vẫn chứa giá trị cũ. Phải truyền tham chiếudouble& x
thì mới thay đổi giá trị củaa
được (cái này chắc bạn thừa biết rồi). Con trỏ cũng tương tự thôi.int **capPhat(int ,int) thi hay hon.
Chay debug neu ban biet.