[출처] http://daramzz.blogspot.kr/2015/09/vector.html
- assert로 예외처리 하기
assert(조건식); //assert 내부의 조건식이 거짓이면 abort시킨다. #include <assert.h>필요
- memcpy, memmove함수 사용
memcpy와 memmove함수는 공통적으로 목표한메모리로 메모리를 옮겨준다. 하지만 memcpy는 바로 메모리를 옮기지만 memmove는 임시공간에 복사후 옮긴다. 이렇게 하면 안정성이 보장되서 목적지와 원본지가 같을경우 memmove가 사용된다.
- 쓰레기값
0xcccccccc : 초기화 되지 않은 지역변수
0xcdcdcdcd : 초기화되지 않은 힙에 할당된 메모리
0xdddddddd : 힙에서 free된 메모리
0xfeeefeee : 힙에서 free된 메모리
0xfdfdfdfd : 힙에 할당된 메모리의 초과범위(할당된 메모리의 양쪽 끝)
디버그 모드에서는 쓰레기값을 채워야 하지만 release모드에서는 쓰레기값을 채우지 않는다.
- debug 모드, release 모드
debug모드는 내 코드를 그대로 컴파일 하지만 release모드는 컴파일시 최적화 과정을 거친다. 개발시에는 debug모드를 배포를 할때는 release모드를 사용해야 한다.
- long에 관해서
int는 4byte 정수자료형, long은 4byte 정수자료형으로 같아보이지만 만약 64bit 계산체계가 개발되어 포인터가 8byte로 증가하게 되면 int는 여전히 4byte여서 포인터를 int로 casting하는 코드는 버그가 생길수 있다. long은 8byte로 포인터와 같게 증가하기 때문에 포인터를 정수로 바꿔서 연산할 경우 long을 사용해야 한다.
'디버깅' 카테고리의 다른 글
[InstallShield] MsSQL 2008r2, 2012 Express 설치시 Freezing 문제 (0) | 2016.12.17 |
---|---|
[C/C++] WinDbg 로 dump 분석하기 (0) | 2016.11.29 |
[MSSQL] cannot open database in Windows Service (0) | 2016.11.25 |
[VC++] manifest version 설정하기 (0) | 2016.08.24 |
Microsoft.VC80.DebugCRT version="8.0.50727.4053" (0) | 2016.08.24 |