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ỏ
avô hàmcapPhat.thêm có 1 ký tự
&phía trướcathôi:void capPhat(int ** &a, int dong, int cot)cách viết cũ thì
atruyền vàocapPhatlà bản sao của con trỏatrongmain. 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
alàint **, bạn xemint **như là 1 kiểu ví dụppIntvậy. Nếu vậy thìvoid capPhat(int **a, ...tương đương vớivoid capPhat(ppInt a, .... Nhưng trong hàmcapPhatthìalại được gána = new ...nên giá trị củaathay đổi nênacầ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ìxcũng được gánx = ...nhưngxko được truyền tham chiếu nên gọinhanHai(a)trongmainthìavẫn chứa giá trị cũ. Phải truyền tham chiếudouble& xthì 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.