xxxx.h फ़ाइल में:जीसीसी/लिनक्स: CppuTest स्थिर वैक्टर, झूठी सकारात्मक का उपयोग कर स्मृति रिसाव दिखाता है?
struct dn_instance_pair
{
std::string theDn;
int theInstance;
};
typedef struct dn_instance_pair t_dn_inst_pair;
struct table_rowid_type
{
char theTable[101];
sqlite3_int64 theRowid;
int operation;
};
// static class members
static vector<t_dn_inst_pair> dninstList;
static vector<t_table_rowid_type> tablerowidList;
xxxx.cpp
// declaration of vectors.
// Included to this post only for completeness.
vector<t_dn_inst_pair> xxxx::dninstList;
vector<t_table_rowid_type> xxxx::tablerowidList;
ये वाहक स्थिर कॉलबैक कार्यों में नियंत्रित किया जाता है, ताकि वे भी स्थिर होना चाहिए में।
cpputest में, जब इन वैक्टर में से किसी एक में कुछ जोड़ने की कोशिश कर, एक विफलता होता है:
Leak size: 8 Allocated at: <unknown> and line: 0. Type: "new" Content: "<\[email protected]"
सामान एक सदिश को जोड़ा गया स्वत: चर रहे हैं और यह एक सामान्य समारोह में क्या होता है:
t_dn_inst_pair thePair;
thePair.theDn = updated_dn;
thePair.theInstance = updated_instance;
वेक्टर परीक्षण मामले के अंत में मंजूरी दे दी है:
xxxx::yyyy()->dninstList.clear();
(yy
"यह एक झूठी सकारात्मक है: yy() एक सिंगलटन xxxx वस्तु के लिए एक सूचक रिटर्न)
पृष्ठ http://blog.objectmentor.com/articles/2010/02/04/cpputest-recent-experiences स्मृति रिसाव उसी तरह की चर्चा करता है। Esko
इस विफलता वास्तव में एक झूठी सकारात्मक हैbr: यह एक बार की आवंटन और सी ++ स्मृति आवंटन और स्थिर प्रारंभ की एक पक्ष प्रभाव है "
तो मेरे सवाल है।?
हाय जोनाथन, आपके उत्तर के लिए धन्यवाद। हाँ, मैंने वालग्रिंड के साथ जांच की; कोई स्मृति रिसाव नहीं है। valgrind --tool = memcheck --leak-check = full --show-reachable = yes ./executable। मैं deallocating के लिए स्वैप चाल जोड़ देंगे। और वैक्टर को गैर स्थैतिक में बदलने की कोशिश करेगा और सिंगलटन के माध्यम से उन्हें एक्सेस करेगा (हालांकि यह बेकार है;)। br Esko –
मुझे विश्वास है कि यह वास्तव में विनाश के आदेश के कारण प्रकट होता है। अर्थात।कि स्मृति वास्तव में मुक्त हो जाती है, केवल CppUTest ने लीक की सूचना दी है। इसका कारण यह है कि 'मुख्य()' फ़ंक्शन रिटर्न के बाद वैश्विक विनाश के दौरान स्थैतिक वस्तुओं को केवल नष्ट कर दिया जाता है (और उनकी याददाश्त मुक्त), लेकिन सीपीपीयूटीएस्ट शायद परीक्षण चालक के अंत में लीक की रिपोर्ट करता है, जिसका अर्थ है कि अभी भी 'मुख्य() ' । यह समझाएगा कि क्यों वालग्रिंड उन्हें दिखाता है - शो-पहुंच योग्य = हाँ। –
हाय जोनाथन, गैर-स्थिर एक आकर्षण की तरह काम किया। मैंने स्वैप भी किया। धन्यवाद ! स्पष्टीकरण के लिए जन को भी धन्यवाद –