Read-only archive. Login and posting are unavailable.
Reply
 
Thread Tools
  #1  
Old 14-03-2020, 20:15
Đã tốn tiền
Join Date: 03-2015
Posts: 310
[C++] Giải phòng bộ nhớ cho con trỏ.

Chào các anh, hiện tại em học tới phần con trỏ trong C++, và có 1 vài thắc mắc về giải phòng vùng nhớ cho con trỏ mong các anh giải đáp.

Có 1 hàm A của chương trình được đóng gói trong 1 file .a, hàm A nó sẽ trã về 1 mảng dữ liệu là (unsigned char*).
Em tạo 1 con trỏ là (unsigned char*) để hứng dữ liệu trả về của hàm A đại loại như này:

unsigned char *data = A();

vậy ta có cần giải phòng vùng nhớ cho biến data hay không?

Vì khi em học lý thuyết thì khi ta khởi tạo như này thì phải giải phóng nó:

unsigned char *data = new[9999];

delete[] data;

Rất cảm ơn các anh, ngoài ra còn có những lý thuyết nào có ích hay không hãy chia sẽ với em.
Reply With Quote
  #2  
Old 14-03-2020, 23:34
hts222's Avatar
Senior Member
Join Date: 12-2016
Posts: 888
Re: [C++] Giải phòng bộ nhớ cho con trỏ.

Quote:
Originally Posted by thichbuombuom View Post
Chào các anh, hiện tại em học tới phần con trỏ trong C++, và có 1 vài thắc mắc về giải phòng vùng nhớ cho con trỏ mong các anh giải đáp.

Có 1 hàm A của chương trình được đóng gói trong 1 file .a, hàm A nó sẽ trã về 1 mảng dữ liệu là (unsigned char*).
Em tạo 1 con trỏ là (unsigned char*) để hứng dữ liệu trả về của hàm A đại loại như này:

unsigned char *data = A();

vậy ta có cần giải phòng vùng nhớ cho biến data hay không?

Vì khi em học lý thuyết thì khi ta khởi tạo như này thì phải giải phóng nó:

unsigned char *data = new[9999];

delete[] data;

Rất cảm ơn các anh, ngoài ra còn có những lý thuyết nào có ích hay không hãy chia sẽ với em.
Không, khi tạo new như vậy là cấp vùng nhớ trong bộ nhớ heap.

Còn trong trường hợp này là bộ nhớ stack nó trả về, thế nên không cần giải phóng.
1584337
__________________
x
Reply With Quote
  #3  
Old 15-03-2020, 07:28
Đã tốn tiền
Join Date: 03-2015
Posts: 310
Re: [C++] Giải phòng bộ nhớ cho con trỏ.

Quote:
Originally Posted by hts222 View Post
Không, khi tạo new như vậy là cấp vùng nhớ trong bộ nhớ heap.

Còn trong trường hợp này là bộ nhớ stack nó trả về, thế nên không cần giải phóng.
1584337
Chào anh, anh có thể cho em thêm vài lý thuyết như vậy nữa không ạ, rất cảm ơn anh nhiều.
Reply With Quote
  #4  
Old 15-03-2020, 13:19
Đã tốn tiền
Join Date: 03-2015
Posts: 310
Re: [C++] Giải phòng bộ nhớ cho con trỏ.

Thêm 1 câu hỏi nữa là:
Có 1 class A, trong class đó có 1 con trỏ p được khai báo là:
unsigned char *p = new[1000];

Và class A có hàm hủy, trong đó sẽ delete[] p.
Nó có 1 hảm trả về dữ liệu của con trỏ p.

Hàm main của em có 1 biến khác hứng dữ liệu con trỏ p đó thì có cần giải phóng nó luôn không??

class A {

unsigned char* p = new[1000];
public:
unsigned char* returnP
{
return p;
}
~A
{
delete[] p;
}
};


main()
{
A a;
unsigned char *b = a.returnP();

}

Có cần giải phóng b nữa không ạ?
Reply With Quote
  #5  
Old 15-03-2020, 20:23
hts222's Avatar
Senior Member
Join Date: 12-2016
Posts: 888
Re: [C++] Giải phòng bộ nhớ cho con trỏ.

Quote:
Originally Posted by thichbuombuom View Post
Thêm 1 câu hỏi nữa là:
Có 1 class A, trong class đó có 1 con trỏ p được khai báo là:
unsigned char *p = new[1000];

Và class A có hàm hủy, trong đó sẽ delete[] p.
Nó có 1 hảm trả về dữ liệu của con trỏ p.

Hàm main của em có 1 biến khác hứng dữ liệu con trỏ p đó thì có cần giải phóng nó luôn không??

class A {

unsigned char* p = new[1000];
public:
unsigned char* returnP
{
return p;
}
~A
{
delete[] p;
}
};


main()
{
A a;
unsigned char *b = a.returnP();

}

Có cần giải phóng b nữa không ạ?
p là một con trỏ, khi dùng lệnh new thì nó cấp vùng nhớ và gán p vào vị trí của ô nhớ đó.

Thế nên giải phóng a hoặc b thôi.
1584337
__________________
x
Reply With Quote
Reply

« Previous Thread | Next Thread »

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


All times are GMT +7. The time now is 22:43.