Code Snippets/Boost2012. 2. 23. 11:50

C++0X를 사용 못할 상황이 생겼다.
lambda 사용을 제거해야 하는데 매번 functor class를 만들어 주는 것도 만만치 않다.
bind를 잘 사용하면 될 것 같아서 해 봤는데,
lambda 사용 버전과 미사용 버전은 그 편의성과 직관성에서 비교가 되지 않는 것 같다.
그래도, 간단한 lambda에 대해서는 fuctor class를 만드는 것보다는 나을 것 같아서 정리해 본다.

'Code Snippets > Boost' 카테고리의 다른 글

함수 호출 연기 & 함수 타입 캐스팅  (0) 2010.09.17
Nested Bind  (0) 2010.09.09
Generalized Function Pointers  (0) 2010.09.06
boost::bind 활용  (0) 2010.09.03
boost 관련 유용한 링크 모음  (0) 2010.08.20
Posted by codevania
Debug2011. 9. 3. 16:43

자주 나오는 매직 발류들에 대해서 정리.
자세한 정보는 여기 참조.



* 0xCCCCCCCC : Allocated on stack, but not initialized
* 0xCDCDCDCD : Allocated in heap, but not initialized (Debug)
* 0xBAADF00D : Allocated in heap, but not initialized (Release)
* 0xDDDDDDDD : Released heap memory.
* 0xFDFDFDFD : automatically placed at boundary of heap memory. Should never be overwritten.




[ StackOverflow 펌 ]
* 0xABABABAB : Used by Microsoft's HeapAlloc() to mark "no man's land" guard bytes
               after allocated heap memory

* 0xABADCAFE : A startup to this value to initialize all free memory to catch errant pointers
* 0xBAADF00D : Used by Microsoft's LocalAlloc(LMEM_FIXED) to mark uninitialised allocated
               heap memory

* 0xBADCAB1E : Error Code returned to the Microsoft eVC debugger when connection is severed
               to the debugger

* 0xBEEFCACE : Used by Microsoft .NET as a magic number in resource files
* 0xCCCCCCCC : Used by Microsoft's C++ debugging runtime library to mark uninitialised
               stack memory

* 0xCDCDCDCD : Used by Microsoft's C++ debugging runtime library to mark uninitialised
               heap memory

* 0xDEADDEAD : A Microsoft Windows STOP Error code used when the user manually initiates
               the crash.

* 0xFDFDFDFD : Used by Microsoft's C++ debugging heap to mark "no man's land" guard bytes before
               and after allocated heap memory

* 0xFEEEFEEE : Used by Microsoft's HeapFree() to mark freed heap memory

'Debug' 카테고리의 다른 글

Debug variables about STL  (0) 2011.08.18
재컴파일 없이 프로그램 실행 로직 제어하기  (0) 2010.08.20
Posted by codevania
Debug2011. 8. 18. 00:00

Debug할 때 "Condition..." 또는 "When Hit..."에서 string::empty() 같은 함수들의 return 값은 기대한 결과를 반환하지 않는다.
그러나 변수의 값은 결과를 기대할 것도 없이 그냥 그 값이다.
그래서 "Condition..."에서 다음과 같이 함수가 아닌 변수로 조건을 걸면 문자열이 0인 경우 break가 잡힌다.
>> strWhat._Mysize == 0

이왕 정리하는 김에 유용한 것들을 기록해 본다.
(MS STL 기준. Debug mode)



string
_Bx        : 실제 인스턴스
_Bx._Buf   : 문자들이 16개 이하일 때의 저장소 (\0 포함)
_Bx->_Ptr  : 문자들이 16개 초과일 때의 포인터
_Mysize    : 문자열 길이
max_size() : 0xffffffff. 4294967295개를 넘을 수 없다.
_BUF_SIZE <= _Myres : true -> _Buf  /  false -> *_Ptr

list
_Myhead    : Head node의 포인터
_Mysize    : list의 element 개수
max_size() : 0x3fffffff. 1073741823개를 넘을 수 없다.

vector
_Myfirst   : 배열의 시작 포인터
_Mylast    : element sequence의 끝 포인터. size와 관련.
_Myend     : 배열의 끝 포인터. capacity와 관련.
_Mylast - _Myfirst : 배열의 크기. (_Mysize가 없다)


map / set
_Myhead    : 헤드 노드 포인터
_Mysize    : 크기


Note.
리스트의 erase함수는 list의 장점을 좀 못 살리고 있다.
element들을 delete하기 위해 while문을 돌면서 하나하나 삭제 한다.
음... 따로 방법이 없나? -_-;;
덕분에 Size를 바로 구할 수 있는 점은 좋지만... 누가 size를 자주 구할 목적으로 list를 사용할까?

'Debug' 카테고리의 다른 글

Magic debug values  (0) 2011.09.03
재컴파일 없이 프로그램 실행 로직 제어하기  (0) 2010.08.20
Posted by codevania