今日の謎
Visual Studio 2005にて。
01: #define _CRTDBG_MAP_ALLOC 02: #include <stdlib.h> 03: #include <crtdbg.h> 04: #define new ::new(_NORMAL_BLOCK, __FILE__, __LINE__) 05: 06: class A 07: { 08: }; 09: 10: class B 11: { 12: public: 13: ~B() {} 14: }; 15: 16: void main(void) 17: { 18: _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); 19: _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT); 20: _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); 21: 22: delete [] new char[1]; 23: delete new char[1]; 24: 25: delete [] new A[1]; 26: delete new A[1]; 27: 28: delete [] new B[1]; 29: delete new B[1]; 30: }
メモリリークが検出されるのは29行目のだけ。
T:\>cl /MDd /D_DEBUG zzz.cpp T:\>zzz Detected memory leaks! Dumping objects -> zzz.cpp(29) : {60} normal block at 0x00370F90, 5 bytes long. Data: < > 01 00 00 00 CD Object dump complete. T:\>
もちろん正しいdeleteの使い方ではないので気にしない!