typedef struct
{
int **arr,x,y;
}bang;
main()
{
int i;
bang b;
b.x=3; b.y=4;
b.arr=(int**)malloc(b.x*sizeof(int *));
for(int i=0;i<b.y;i++) b.arr*=(int*)malloc(b.y*sizeof(int));
}
đấy là code cấp phát bộ nhớ cho con trỏ cấp 2… Anh chị ơi chỉ em cách giải phóng bộ nhớ của con trỏ cấp 2 với(viết tiếp đoạn code bên trên)…
// Dau tien, ta xoa cac vung nho da cap phat cho con tro cap 1
for (i = 0 ; i < b.x ; ++i)
free( b.arr* );
b.x = 0;
// Tiep theo, ta xoa vung nho da cap phat cho con tro cap 2
free( b.arr );
b.y = 0;
Mong giúp được bạn.
[QUOTE=13520692;269273]
typedef struct
{
int **arr,x,y;
}bang;
main()
{
int i;
bang b;
b.x=3; b.y=4;
b.arr=(int**)malloc(b.x*sizeof(int *));
for(int i=0;i<b.y;i++) b.arr*=(int*)malloc(b.y*sizeof(int));
}
đấy là code cấp phát bộ nhớ cho con trỏ cấp 2… Anh chị ơi chỉ em cách giải phóng bộ nhớ của con trỏ cấp 2 với(viết tiếp đoạn code bên trên)…[/QUOTE]
- Giải phóng bộ nhớ như anh [MENTION=7355]10520100[/MENTION] đúng rồi, nhưng bạn bị sai 1 lỗi :
- Ban đầu bạn cấp phát: b.x = 3
- Vòng lặp bạn cho: i < b.y = 4 => Bạn xin có 3 nhưng bạn đòi nó cấp phát 4 lần
[QUOTE=12520609;269278]- Giải phóng bộ nhớ như anh [MENTION=7355]10520100[/MENTION] đúng rồi, nhưng bạn bị sai 1 lỗi :
+ Ban đầu bạn cấp phát: b.x = 3
+ Vòng lặp bạn cho: i < b.y = 4 => Bạn xin có 3 nhưng bạn đòi nó cấp phát 4 lần[/QUOTE]
b.x=3// xin cap phat hang
b.y=4 // xin cap phat cot…
ch em hỏi còn cách nào để giải phóng nửa không… em làm ròi… chương trình chỉ chạy được 2 lần tới lần thứ 3 là nó bị lỗi…
#include <stdio.h>
#include <stdlib.h>
// Dinh nghia kieu BANG
typedef struct
{
int row;
int column;
int **arr;
} BANG;
int main()
{
// Khoi tao cho bang
// Row = 3
// Column = 4
BANG bang;
bang.row = 3;
bang.column = 4;
// Xin cap phat bo nho
bang.arr = (int **) malloc (bang.row * sizeof(int *));
for(int i = 0 ; i < bang.row ; ++ i)
bang.arr* = (int *) malloc (bang.column * sizeof(int));
// Giai phong bo nho
for(int i = 0 ; i < bang.row ; ++ i)
free(bang.arr*);
free(bang.arr);
// Chuong trinh chay thanh cong
return 0;
}
Bạn thử code này thử xem.
[QUOTE=13520692;269281]b.x=3// xin cap phat hang
b.y=4 // xin cap phat cot…
ch em hỏi còn cách nào để giải phóng nửa không… em làm ròi… chương trình chỉ chạy được 2 lần tới lần thứ 3 là nó bị lỗi…[/QUOTE]
Để dễ hiểu em có thể vẽ ra:
- Lần 1: b.x =3 => cấp phát 3 ô nhớ: [0]
[1]
[2]
- Lần 2: Nếu em dùng vòng lặp với đk: i < b.y = 4
[0]
[1]
[2]
[3]
- Có nghĩa là em đã dư 1 lần cuối cùng => ĐK vòng lặp i < b.x = 3