소스 코드에서 다음과 같은 매크로를 삽입한다.
#define CRTDBG_MAP _ALLOC

메모리 누수 확인을 위한 부분에 다음과 같은 코드를 삽입한다음
 _CrtDumpMemoryLeaks();

Visual Studio에서 디버그 모드로 수행하면 output윈도우에서 메모리 누수를 확인 할 수 있다.
사용자 삽입 이미지

프로그램이 종료 되면 반환되지 않은 메모리는 운영체제에서 일반적으로 반환 해준다. 하지만 수행도중 메모리 누수가 계속 해서 발생된다면 프로그램은 죽을 수 밖에 없다.

종료시점에 메모리 반환도 필요성이 없지만, 나중에 프로그램이 변경될 시 문제 발생의 가능성을 가지고 있을수도 있으므로 종료시점에서도 메모리 반환 하는 습관을 들이는 것이 좋을 것으로 생각 된다.

C나 C++로 과제를 할 경우 상당히 어렵다. 더디다고 할까나? Visual Studio같은 멋진 개발 툴이 있음에도 생각보다 쉽게 프로그램을 만들 수가 없다.

특히 버그가 있음에도 짧은 프로그램에서는 정상적으로 돌아가는 경우도 있었다.

함수안에서 new로 메모리를 활당하고 delete한후 그 포인터값을 반환하고...
함수를 호출 한 쪽에서 그 포인트로 멤버 변수에 접근 했는데..

컴파일러나 운영체제에 따라 정상 수행되는 경우도 있었다. 일부로 안되는 에러 상황을 만들려고 했었는데.. 정상적으로 수행되어.. 순간 혼란 스러웠던 적도 있다..

얼마전 C로 작성한 과제가 gcc/vc6/vc2007 모두에서 오류/경고 가 없었음에도 불구하고.--; 특정 컴파일러로 만든 실행파일은 실행 안되는 경우가 있었다.. 이런건 경고라도 떠야 뭐가 문제인지 찾지 과제 제출 기한도 바쁜데.. 어떻게 찾으란 말인가??ㅠㅠ;;

그래서 어쩔수 없이 컴파일러 별로 테스트한 후 성공 여부를 맨위에 주석으로 적어서 재출하는 방법을 사용했다.

정말 신경을 쓰고 짜지 않으면 짧은 프로그램이라도 문제가 발생할지 모른다..--;; 아직 스킬이 부족해서 그런거라 생각이 들지만..ㅠㅠ;; 언젠가 프로그래머의 대가 되고 싶다...
신고


티스토리 툴바