CRect의 생성자에 NULL을 넣어서 초기화 해주면 쓰레기 값이 들어간다. 예를 들어 CRect rt(NULL); 하면 rt에는 막 -2349823 이런 쓰레기 값이 들어간다 0으로 초기화 하는게 목적이라면 그냥 CRect rt 까지만 해주는게 제일 좋다. 이 차이가 어디서 발생하냐면 IsRectNull()과 IsRectEmpty() 의 성공 여부 때문이다. 나는 당연히 CRect rt(NULL) 한 다음에 rt.IsRectNull() 하면 TRUE가 리턴될 줄 알았다. 그런데 아니더라. IsRectNull()은 해당 CRect가 0으로 초기화 돼있는지를 검사하기 때문이다. 하지만 쓰레기 값이 들어있으니 rt(NULL)로 초기화 했다면 IsRectNull()로 FALSE가 나오는 것이다. 안전하게 rt..
MFC DLL에서 class에 vector를 담아서 Export 하려 시도 하였다. 처음에는 잘 되는 듯이 보였지만, class를 delete 하는 순간, 와장창 무너지기 시작했다. 계속해서 dbgheap.c의 _CrtIsValidHeapPointer(const void * pUserData) 안에 있는 HeapValidate( _crtheap, 0, pHdr(pUserData) ); 에서 FALSE을 리턴하여 ASSERT에 걸리게 되었다. 계속 디버깅을 해보니, vector의 소멸을 제대로 하지 못하고 있었다. vector의 소멸자를 따라가 보니 dbgheap.c의 _crtheap이 caller의 heap을 가리키고 있는 것이 보였다. 아니, 애당초 call stack의 소멸 지점이 callee 인 d..
- Total
- Today
- Yesterday
- winapi
- jni강좌
- driver
- kering
- algorithm
- 안드로이드
- android
- 음악
- 드라이버
- Cloud
- 프로그래밍
- Python
- db
- database
- C++
- linux
- Visual C++
- gcc
- 리눅스
- C
- Troubleshooting
- it
- Quiz
- API
- source
- jni
- java
- MFC
- AWS
- NDK
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 |