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++

01:44 14-08-2017 1.496 lượt xem 3 bình luận 14:30 14-08-2017

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 

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
K9 SuperAdmin, KquizAdmin, KquizAuthor đã bình luận 13:56 14-08-2017

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.

Câu hỏi mới nhất