में आवंटित स्मृति को खाली करना मेरे पास एक डीएलएल फ़ाइल का उपयोग कर एक EXE फ़ाइल है जो एक और DLL फ़ाइल का उपयोग कर रही है। यह स्थिति उत्पन्न हो गई है:एक अलग DLL
DLL फ़ाइल 1:
class abc
{
static bool FindSubFolders(const std::string & sFolderToCheck,
std::vector<std::string> & vecSubFoldersFound);
}
DLL फ़ाइल 2 में:
void aFunction()
{
std::vector<std::string> folders;
std::string sLocation;
...
abc::FindSubFolders(sLocation, folders)
}
रिलीज़ मोड में, सब कुछ ठीक काम करता है। लेकिन डिबग मोड में, मैं फ़ोल्डरों वेक्टर में std::strings
में से एक की नाशक में एक अभिकथन विफलता के साथ आते हैं (जब फ़ोल्डरों aFunction के अंत में क्षेत्र से बाहर चला जाता है):
dbgheap.c : line 1274
/*
* If this ASSERT fails, a bad pointer has been passed in. It may be
* totally bogus, or it may have been allocated from another heap.
* The pointer MUST come from the 'local' heap.
*/
_ASSERTE(_CrtIsValidHeapPointer(pUserData));
मुझे लगता है कि यह इसलिए है क्योंकि स्मृति को डीएलएल फ़ाइल 1 के ढेर पर आवंटित किया गया है, लेकिन डीएलएल फाइल 2 में मुक्त किया जा रहा है।
dbgheap.c
में टिप्पणी बहुत जोर देती है कि यह एक समस्या है।
क्यों इस तरह के एक समस्या, जब यह करता है, तो मैं बस इसे अनदेखा ठीक से काम करने लगता है है? क्या ऐसा करने का एक गैर-दावा-असफल तरीका है?
डॉट। नज़रअंदाज़ करना । आकलन – KeatsPeeks
नहीं। अनदेखी। आईटी। ऐसा इसलिए है। क्यूं कर। मैंने पूछा। = पी – Smashery
बस जानना चाहते हैं * क्यों * यह एक समस्या है। – Smashery