Read-only archive. Login and posting are unavailable.

PDA

View Full Version : [C++] Giải phòng bộ nhớ cho con trỏ.


thichbuombuom
14-03-2020, 20:15
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.

hts222
14-03-2020, 23:34
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

thichbuombuom
15-03-2020, 07:28
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.

thichbuombuom
15-03-2020, 13:19
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 ạ?

hts222
15-03-2020, 20:23
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