मैं मेमोरी रिसाव का पता लगाने की कोशिश कर रहा हूं, और मैं लीक क्षेत्र कहां ढूंढने के लिए _CRTDBG_MAP_ALLOC मैक्रो बनाने का उपयोग कर रहा हूं। तो मैं निम्नलिखित की तरह मैक्रो को परिभाषित कर रहा हूँ:_CRTDBG_MAP_ALLOC फ़ाइल नाम नहीं दिखा रहा है
#ifdef _DEBUG
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
#endif
मेरे कोड में, मैं है:
UINT SomeFunThread(LPVOID pParam)
{
_CrtMemState crtMemStateStart;
_CrtMemState crtMemStateFinish;
_CrtMemCheckpoint(&crtMemStateStart);
// My suspisious code
_CrtMemCheckpoint(&crtMemStateFinish);
int nDifference(0);
_CrtMemState crtMemStateDifference;
nDifference = _CrtMemDifference(&crtMemStateDifference, &crtMemStateStart, &crtMemStateFinish);
if(nDifference > 0)
_CrtDumpMemoryLeaks();
return 0;
}
(धन्यवाद तुषार जाधव को: Memory consumption increases quickly, then drops very slowly; memory leak?)
लेकिन उत्पादन की तरह कुछ पता चलता है:
Detected memory leaks!
Dumping objects ->
{124058} normal block at 0x0000000031DED080, 24 bytes long.
Data: < 0 ` $ > C8 30 F7 EF FE 07 00 00 60 D2 24 1D 00 00 00 00
इस तरह के कुछ के बजाय:
Detected memory leaks!
Dumping objects ->
C:\PROGRAM FILES\VISUAL STUDIO\MyProjects\leaktest\leaktest.cpp(20) : {18}
normal block at 0x00780E80, 64 bytes long.
Data: < > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
Object dump complete.
तो मैं इस शो को फ़ाइल नाम और रिसाव का स्थान कैसे बना सकता हूं?
कोड आवंटित करता है कि सिर्फ अपने #defines साथ संकलित नहीं किया गया था प्रभाव में। लाइब्रेरी में स्थित हो सकता है, डीएलएल में प्रीबिल्ट सी ++ टेम्पलेट क्लास स्पेशलाइजेशन की तरह हो सकता है। या लीक रिपोर्ट उत्पन्न होने से पहले डीएलएल कोड को अनलोड कर दिया गया था। –
@ हंसपैसेंट तो क्या आप कहते हैं कि यह मेरा "संदिग्ध कोड" नहीं था जो लीक; यह कुछ कोड/bianraies/dlls था जो "संदिग्ध कोड" के भीतर बुलाया जाता है? –
मैं कहूंगा कि यह वह कोड है जिसे आपने नहीं मिला है, कहीं भी हो सकता है। लीक के साथ सामान्य समस्या, है ना? यदि आप दोहराने के लिए {braces} के बीच की संख्या प्राप्त कर सकते हैं तो उस नंबर पर _crtBreakAlloc सेट करें। –