VC20에서 VS2015 및 MFC를 사용하는 응용 프로그램에서 메모리 누수를 제거하려고합니다. 이 비슷한 질문에 대답은 도움이되지 않았다 : How to detect memory leak when memory allocation number isn't always same? 구성 속성> C/C++> 코드 생성에서VS2015 MFC에서 같은 메모리 누수가 발생해도 메모리 할당 번호가 계속 변경되는 이유는 무엇입니까?
, 나는/MTD에/MT에서 런타임 라이브러리에 대해 선택한 옵션을 변경했습니다.
응용 프로그램이 다중 스레드 (afaik)가 아닙니다.
프로그램 실행간에 메모리 할당 번호가 변경되어 코드의 다른 위치로 연결됩니다.
내가 사용한 절차는 이전에 잘 작동했습니다.
이전 메모리 누수 보고서에서 메모리 할당 번호를 복사하고 앱을 시작합니다.
중단 점에서 멈 추면 조사 식 창으로 이동하여 _crtBreakAlloc의 값 열에 붙여 넣습니다. (예 : _crtBreakAlloc 1171).
그런 다음 중단 될 때까지 프로그램을 실행하고 호출 스택을 사용하여 unfreed 개체를 찾습니다.
// Example of the memory report
...
{1171} client block at 0x088157A0, subtype c0, 224 bytes long.
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dumpcont.cpp(23) : atlTraceGeneral - a ProgressBar object at $088157A0, 224 bytes long
{223} normal block at 0x01E79600, 324 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
...
// Example of the next report
...
{1112} client block at 0x08B30480, subtype c0, 224 bytes long.
f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dumpcont.cpp(23) : atlTraceGeneral - a ProgressBar object at $08B30480, 224 bytes long
{223} normal block at 0x01F693D8, 324 bytes long.
Data: < > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
...
메모리 할당 번호 "1171"이 "1112"로 변경되고 그 위에있는 모든 숫자에도 영향을줍니다.
VS2015 만 열린 상태에서 PC를 시작한 후에도 인접한 프로그램 실행 간에는 아무런 변화가 없습니다. 나는 매번 프로그램을 똑같은 순서로 똑같은 일을하면서 똑같은 순서로 유지합니다. 예. 어떤 도움이 아주 많이 이해할 수있을 것이다 has-
//stdafx.h
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#ifdef _DEBUG
#define DBG_NEW new (_NORMAL_BLOCK , __FILE__ , __LINE__)
#else
#define DBG_NEW new
#endif
// CImage.h : main header file for the CImage application
#define _CRTDBG_MAP_ALLOC // Supports memory leakage detection.
#include <stdlib.h>
#include <crtdbg.h>
#ifdef _DEBUG
#ifndef DBG_NEW
#define DBG_NEW new (_NORMAL_BLOCK , __FILE__ , __LINE__)
#endif
#endif
코드, 운영자 새로운 매핑하려면 같은 버튼/키 등
을 누르면, 같은 파일을로드합니다. 고마워요
감사합니다. 명확하게 Q를 편집했습니다. (1) 아무 코드도 내 코드 (afaik)에서 생성되지 않습니다. (2,3) 각 실행에 대해 동일한 최소 일련의 동작을 반복합니다. (4) SetTimer()가 호출되지 않았습니다. 마지막으로, ".. 프로그램의 모든 레지스트리 항목을 지우십시오.", "감시 창에서 할당 수를 봅니다."라는 의미는 무엇입니까? ? – ArtH
뜻. 브레이크 카운트를 발견 한 최소 카운트보다 작게 설정하십시오. MFC 코드를 코드에 추가하는 것보다 ... 출력 창의 데이터를 사용하면 누수를 일으키는 할당을 찾을 수 있습니다. – xMRi
기계의 상황에 따라 처리가 다를 수 있기 때문에 ... – xMRi