Hỏi đáp
Chia sẻ kiến thức, cùng nhau phát triển
Vấn đề rò rỉ bộ nhớ trong C++ - Memory leak C++
Mình có 1 vấn đề không hiểu rõ . mn giúp mình với ạ .
mình có 2 class như sau :
class CB
class CB {
public:
CB(){
m_iVal = 0;
}
~CB(){}
int m_iVal;
};
class CA
class CA {
public:
CA(){
m_pB = 0;
}
~CA(){
delete m_pB;
m_pB = 0;
}
CB *m_pB;
};
và hàm main như sau
int main()
{
CB *B = new CB;
CA *A = new CA();
A->m_pB = B; // vấn đề ở đây
delete(A); // và ở đây
printf("%d", B->m_iVal);
system("pause");
return 0;
}
- Với chương trình như trên thì có xảy ra vấn đề rò rỉ bộ nhớ hay vi phạm quyền truy xuất không mn nhỹ ?
- Vấn đề tiếp theo là mình dùng con trỏ ở Object A trỏ đến B . và nó có thể thực hiện mọi thay đỗi trên B . nhưng sao khi mình delete(A) đi thì giá trị bên B không giữ được vậy ạ . nhưng nếu delete(A) ở cuối thì mọi chuyện vẫn diễn ra bình thường
- Vấn đề thứ 3 là ở class CA mình bỏ delete m_pB thì có phải xảy ra memory leak không ạ ?
class CA {
public:
CA(){
m_pB = 0;
}
~CA(){
//delete m_pB;
m_pB = 0;
}
CB *m_pB;
};
Mọi người giúp mình với nhé . tks all
1. Sau khi delete(A) thì B cũng bị giải phóng nên các truy cập sau đó trên B là không an toàn.
2. Trong hàm hủy A bạn có giải phóng bộ nhớ của B nên tất nhiên là B bị giải phóng rồi.
3. Cái này không liên quan đến nhau, Có chăng vấn đề là bạn dùng một con trỏ chưa được cấp phát thì lỗi thôi.