cần sự giúp đở về pointer...

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

tks… cac a em lm dc roi`