01/10/2018, 09:35

Cấp phát và xóa bộ nhớ động nhiều lần sau mỗi vòng while() nó nên ko?

giả sử mình có

while(true)
{
      int** a=new int*[n];
      for( int i=0;i<n;i++) a[i] = new int[n];

      các câu lệnh làm thay đổi giá trị a[n][n]

      for(int i = 0; i < n; i++) delete[]a[i];
      delete[]a;
}
HelloWorld viết 11:37 ngày 01/10/2018

Cái này là sử dụng con trỏ trỏ đến con trỏ
**a để cấp phát 1 mảng 2 chiều
Con trỏ thứ 1 trỏ đến 1 mảng con trỏ. Mỗi con trỏ trong mảng trỏ đến 1 mảng int
Nên khi giải phóng phải làm ngược lại

Tungduong Nguyen viết 11:51 ngày 01/10/2018

cái dưới mình giải phóng bộ nhớ đúng ko
xong vào vòng lặp mới lại khái báo lại liệu có dc ko nhỉ

HelloWorld viết 11:38 ngày 01/10/2018

Như trên bạn để trong vòng while cấp phát xong rồi xóa luôn à.k dùng à

int *a, m,n;
Cấp phát
a =new int
[m];
for(int i=0; i<m ; i++) a[i] = new int[n];

Giải phóng
for(int i=0; i<m ; i++) delete a[i];
delete a;

delete []a ; là xóa mảng con trỏ
delete a; là xóa con trỏ

Tungduong Nguyen viết 11:38 ngày 01/10/2018

sau mỗi vòng while thì giá trị của n thay đổi
vậy có nên xóa cả mảng đi rồi cấp phát lại hay để nguyên ??

HelloWorld viết 11:41 ngày 01/10/2018

Mỗi vòng while của bạn mình thấy nó cấp phát xong xóa luôn có nhập giá trị cho mảng hay là thay đổi gì đâu

Tungduong Nguyen viết 11:43 ngày 01/10/2018

có thay đổi và nhập giá trị đấy

HelloWorld viết 11:46 ngày 01/10/2018

Trên cái dòng bạn nói à
Nhưng như thế
Cấp phát xong
Nhập mảng xong
Bạn xóa đi thì mục đích bt bạn làm là gì

Tungduong Nguyen viết 11:41 ngày 01/10/2018

mình đang làm game có nhiều màn chơi
mà mỗi màn là một giá trị của n

HelloWorld viết 11:36 ngày 01/10/2018

M k biết bạn đang làm project gì nên khó tl lắm
Nhưng như trên bnj phải xử lý mảng a trước khi nó bị xóa mất khi chạy xog mỗi vòng while

Tungduong Nguyen viết 11:50 ngày 01/10/2018

thôi vậy, cảm ơn bạn nhé

Bài liên quan
0