2011-03-18 2 views
1

디버거 버전의 기본 할당자가 사용된다는 점을 제외하면 릴리즈 빌드와 동일하게 생성 된 프로젝트 빌드를 만들고 싶습니다 (alloc/free에 대한 카나리아 검사 포함). 컴파일러/CRT는 Visual Studio 2010입니다._DEBUG가 정의되지 않은 경우 힙 무결성을 검사하고 있습니까?

CRT에 대한 설명서를 읽으면 제거되지 않는 _CrtCheckMemory(), _malloc_dbg() 등의 호출에 대해 _DEBUG를 정의해야하는 것처럼 보입니다. _DEBUG 정의를 활성화하는 것은 할당 자보다 많은 영향을주기 때문에이를 사용하지 않으려합니다.

_DEBUG를 정의하지 않고 CRT 디버그 할당자를 사용할 수 있습니까?

답변

1

_malloc_dbg()에 글로벌 재정을 만들 디버그 런타임을 필요로 할 수 디버그 런타임은 _DEBUG 필요 - 그래서, 당신은이 작업을 수행 할 수 없습니다.

+0

확인. 그래서 그것의 _DEBUG (어쩌면 최적화 사용 가능) 또는 내 자신의 힙 체크 롤링 ... – Viktor

+0

@Viktor : 그래, 또는 일부 외부 도구를 사용하십시오. http://stackoverflow.com/questions/413477/is-there-a-good-valgrind- substitute-for-windows – Erik

0

_DEBUG가 정의 될 때 사용되는 malloc 호출의 이름을 알 수 있으며 대신 malloc을 수동으로 정의하여 대신 사용할 수 있습니까? 당신의 C++를 사용하는 경우 새와 동일

, 당신은 디버그 버전

+0

작동하지 않습니다. 앞에서 설명한 것처럼'_malloc_dbg'는 디버그 런타임의 일부입니다. 디버그 런타임을 사용하여'_DEBUG'을 정의하지 않고 중단하면 중단됩니다. – Erik