01/10/2018, 08:23

Giải phóng mảng 2 chiều cấp phát động ntn đã đúng chưa?

void FreeMatrix(int **a)
{

if (a != NULL)
{
	for (int i = 0; i <row; ++i)
		delete[] a[i];
}
delete[]a;

}
ở đây biến row chưa đc khai báo thì phải làm s?

Sáng Béo viết 10:29 ngày 01/10/2018

delete[] a[i];

delete a[i] thôi.

ở đây biến row chưa đc khai báo thì phải làm s?

chưa có thì bạn cấp phát cho a như nào?

rogp10 viết 10:28 ngày 01/10/2018

Lưu mảng là đã phải có số phần tử rồi @thớt không có nó không làm ăn gì được.

delete a[i] thôi.

Làm thế lỗi đấy bạn. a[i] là một vùng nhớ (new T[1]) chứ không phải chỉ là 1 biến (new T)

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

Int **a;
a=new int *[row];
For (i=0;i <row;i++)
a [i]= new int [column];
Ý mk là trong hàm Free k có khai báo row

amaterasu viết 10:26 ngày 01/10/2018

Ơ cấp phát động mà. Số row đc nhập từ bàn phím. Nhưng trong hàm Free lại k khai báo

rogp10 viết 10:33 ngày 01/10/2018

Khó thế thì bạn đóng gói lại cả con trỏ và số dòng cột vào struct nhé.

明玉 viết 10:40 ngày 01/10/2018

Chẳng hiểu sao trong hàm đó của bạn tự nhiên có row, đấy là biến toàn cục chăng?

Tao Không Ngu. viết 10:32 ngày 01/10/2018

Hi amaterasu.
1 Việc giải phóng đúng hay sai bạn hoàn toàn tự kiểm tra được.
Nếu bạn dùng Linux thì có một công cụ Valgrind để kiểm tra lỗi này.(TIếc là không có tài liệu tiếng Việt).

2 Mình muốn góp ý về cách cài đặt cấu trúc dữ liệu của bạn. Việc cấp phát động như này là không cần thiết vì ma trận có kích thước các dòng là như nhau. Bạn có thể dùng mảng một chiều và sau đó ánh xạ thành mảng hai chiều sẽ đơn giản hơn, Hoặc dùng con trỏ mảng hai chiều.

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

Chẳng hiểu sao trong hàm đó của bạn tự nhiên có row, đấy là biến toàn cục chăng?

Thầy mk dạy cho câu lệnh giải phóng nv mà @@~

明玉 viết 10:24 ngày 01/10/2018

Chắc thầy quên dặn phải khai báo biến và bảo lưu giá trị

amaterasu viết 10:40 ngày 01/10/2018

Hi amaterasu.1 Việc giải phóng đúng hay sai bạn hoàn toàn tự kiểm tra được.Nếu bạn dùng Linux thì có một công cụ Valgrind để kiểm tra lỗi này.(TIếc là không có tài liệu tiếng Việt).

2 Mình muốn góp ý về cách cài đặt cấu trúc dữ liệu của bạn. Việc cấp phát động như này là không cần thiết vì ma trận có kích thước các dòng là như nhau. Bạn có thể dùng mảng một chiều và sau đó ánh xạ thành mảng hai chiều sẽ đơn giản hơn, Hoặc dùng con trỏ mảng hai chiều.

Tại thầy giao bài tập làm theo 2 hướng dùng con trỏ và con trỏ trỏ trỏ con trỏ phải làm thôi. Chứ dùng cách này lm gì cho rối

amaterasu viết 10:35 ngày 01/10/2018

Chắc thầy quên dặn phải khai báo biến và bảo lưu giá trị

Mk nghĩ đặt hết trong main thì n vẫn chạy bt. Nhưng tạo thành 2 hàm riêng ntn thì tự nhiên chả biết cái row nó từ đâu ra :v

rogp10 viết 10:31 ngày 01/10/2018

Bạn phải đặt row làm tham số chứ =)

明玉 viết 10:24 ngày 01/10/2018

Vậy thì bạn cứ truyền row của bạn vào rồi dùng thôi

Sáng Béo viết 10:24 ngày 01/10/2018

à, quên mất. he he .

Bài liên quan
0