목록memory (2)
Coding Memo
상황 GetQueuedCompletionStatus()가 성공적으로 완료되었음에도 불구하고, Overlapped 구조체의 값이 이상했다. (기대했던 값이 아니었다.) GetQueuedCompletionStatus를 호출한 HANDLE에 `connectEvent`라는 overlapped를 상속하는 구조체가 연결되어 있는 파일 핸들을 등록했다. 따라서 GetQueuedCompletionStatus가 성공적으로 완료되었다면, 인자로 넣어주었던 LPOVERLAPPED*가 이 connectEvent를 가리키는 포인터가 되어야 된다. 그러나 이 포인터는 메모리 오염이 일어난 듯 값이 이상했다. 먼저, IOCPEvent와 ConnectEvent는 다음과 같다.// EventType은 unsigned ..
Use After Free는 해제된 메모리를 더 이상 사용하지 않아야 되는 상황에서 사용하려고 할 때 나타나는 매우 큰 문제이다. (Java나 C#같은 high-level 언어들은 이 문제에 신경을 덜 써도 된다.) Use After Free 문제는 다음과 같은 상황에서 일어날 수 있다. 메모리를 delete(free)한 후에 그 영역에 접근하려고 할 때 즉, 객체의 관점에서 본다면, 객체를 delete(free) 했지만 객체에 대한 포인터가 그대로 남아있어 그 포인터에 접근하려고 할 때 일어난다. 다음 코드를 살펴보고 문제가 되는 점을 찾아보자. using namespace std; class A { public: A() { cout