2012-08-30 15 views
7

मैं gSoap के साथ एक वेब सेवा क्लाइंट लिख रहा हूं और स्मृति समस्याओं की जांच के लिए वालग्रिंड का उपयोग कर रहा हूं।gsoap/valgrind; कोई रिसाव नहीं है लेकिन स्मृति त्रुटियां

वेलग्रिंड कोई लीक रिपोर्ट लेकिन यह अजीब (कम से कम मेरे लिए) स्मृति त्रुटि संदेश दिखाता है:

==3529== Conditional jump or move depends on uninitialised value(s) 
==3529== at 0x405D6DC: soap_reference (stdsoap2.c:6926) 
==3529== by 0x405305D: soap_serialize_string (sepomexC.c:4982) 
==3529== by 0x404AF5E: soap_serialize_ns1__asentamientosPorCodigoPostalRqType (sepomexC.c:2629) 
==3529== by 0x40500F3: soap_serialize_PointerTons1__asentamientosPorCodigoPostalRqType (sepomexC.c:4103) 
==3529== by 0x4046666: soap_serialize___sep__consultarAsentamientosPorCodigoPostal (sepomexC.c:1233) 
==3529== by 0x4053A7D: soap_call___sep__consultarAsentamientosPorCodigoPostal (sepomexClient.c:186) 
==3529== by 0x40417CA: consultarAsentamientosPorCodigoPostal (main.c:73) 
==3529== by 0x804870C: main (sepomexmain.c:31) 
==3529== 
==3529== Conditional jump or move depends on uninitialised value(s) 
==3529== at 0x4061AA5: soap_element_id (stdsoap2.c:9583) 
==3529== by 0x4068B0C: soap_outstring (stdsoap2.c:12681) 
==3529== by 0x4052DAE: soap_out_xsd__integer (sepomexC.c:4918) 
==3529== by 0x404B062: soap_out_ns1__asentamientosPorCodigoPostalRqType (sepomexC.c:2643) 
==3529== by 0x4050179: soap_out_PointerTons1__asentamientosPorCodigoPostalRqType (sepomexC.c:4111) 
==3529== by 0x4046698: soap_out___sep__consultarAsentamientosPorCodigoPostal (sepomexC.c:1238) 
==3529== by 0x4046818: soap_put___sep__consultarAsentamientosPorCodigoPostal (sepomexC.c:1274) 
==3529== by 0x4053AF6: soap_call___sep__consultarAsentamientosPorCodigoPostal (sepomexClient.c:193) 
==3529== by 0x40417CA: consultarAsentamientosPorCodigoPostal (main.c:73) 
==3529== by 0x804870C: main (sepomexmain.c:31) 

==3529== 
==3529== HEAP SUMMARY: 
==3529==  in use at exit: 0 bytes in 0 blocks 
==3529== total heap usage: 160 allocs, 160 frees, 16,161 bytes allocated 
==3529== 
==3529== All heap blocks were freed -- no leaks are possible 
==3529== 
==3529== For counts of detected and suppressed errors, rerun with: -v 
==3529== Use --track-origins=yes to see where uninitialised values come from 
==3529== ERROR SUMMARY: 3 errors from 2 contexts (suppressed: 21 from 8) 

कोई लीक अच्छी खबर यह त्रुटियों महत्वपूर्ण हैं लेकिन,? जैसा कि मैं समझता हूं कि वे stdsoap2.c (एक gSoap फ़ाइल) में उत्पन्न होते हैं।

धन्यवाद।

संपादित करें: आपके उत्तरों के लिए धन्यवाद। जैसा कि आप में से कुछ ने मुझे बताया कि मेरे पास अनियमित सामान था, यह मेरा अनुरोध संरचना चर था। मैंने इसे इस तरह से ठीक किया:

struct ns1__myRequestType request; 
memset(&request, 0, sizeof(struct ns1__myRequestType)); 

अब वालग्रिंड का आउटपुट "साफ" है :) बहुत बहुत धन्यवाद।

+0

क्या आप अपने 'मुख्य() 'का कोड पोस्ट कर सकते हैं? – hmjd

+2

हां वे आमतौर पर बहुत महत्वपूर्ण होते हैं, और ऐसा इसलिए हो सकता है क्योंकि आपका कोड जीएसओएपी लाइब्रेरी में अनियमित सामान पास कर चुका है। – nos

उत्तर

3

यह मूल रूप से इस तथ्य को संदर्भित करता है कि कुछ शाखाएं अनियमित होने वाले चर के आधार पर ली जा रही हैं। वे आसानी से स्टेक पर आवंटित लाइब्रेरी फ़ंक्शन के दायरे में स्वचालित चर स्थानीय हो सकते थे और if, while, switch, या ब्रांचिंग अभिव्यक्ति के अन्य रूप में उपयोग किए जाने से पहले मूल्यों को असाइन नहीं किया गया था। आम तौर पर यह बात करना एक अच्छी बात नहीं है क्योंकि इसका परिणाम अपरिभाषित व्यवहार में हो सकता है, लेकिन यदि त्रुटि लाइब्रेरी में आंतरिक है, तो लेखक कुछ प्रकार के अनुमानित मेमोरी ओवरले ऑपरेशन आदि कर सकते हैं जो चर उन्हें मानक सी सिंटैक्स में स्पष्ट रूप से प्रारंभ करने के बजाय अनौपचारिक रूप से "प्रारंभिक" किया गया। एक और संभावना यह है कि आप लाइब्रेरी फ़ंक्शंस में से किसी एक के लिए अनियमित चर के लिए पॉइंटर्स पास कर सकते थे, जो खराब प्रोग्रामिंग फॉर्म होगा और संभावित रूप से अप्रत्याशित परिणाम या सुरक्षा जोखिम पैदा करेगा।

संबंधित मुद्दे