2012-08-30 5 views
7

私はgSoapでWebサービスクライアントを書き込み、Valgrindを使用してメモリの問題をチェックしています。gsoap/valgrind;リークはありませんが、メモリエラー

Valgrindのは、NO漏れを報告したが、この奇妙な(少なくとも私にとっては)メモリエラーメッセージが表示さ:NO漏れは良いニュースですが、このエラーは重要であり

==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)); 

今のValgrindの出力が:)おかげで多くのことを「クリーン」です。

+0

'main()'のコードを投稿できますか? – hmjd

+2

はい、通常は非常に重要です。コードが初期化されていないものをgSoapライブラリに渡した可能性があります。 – nos

答えて

3

基本的には、初期化されていない変数に基づいていくつかの分岐が取られているという事実を指しています。それらは、スタックに割り当てられ、if,whileswitch、または他の形式の分岐式で使用される前に値が割り当てられていないライブラリ関数の範囲内のローカルな自動変数である可能性があります。一般に、これは未定義の動作を引き起こす可能性があるため、これはうまく行かないが、エラーがライブラリの内部にある場合、ライターは、いくつかのタイプの想定されるメモリオーバーレイ操作などを、標準的なC構文で明示的に初期化されるのではなく、非形式的に "初期化"されます。もう1つの可能性は、初期化されていない変数へのポインタをライブラリ関数の1つに渡すこともできます。プログラミングの形式が悪く、予測できない結果やセキュリティリスクが発生する可能性があります。

関連する問題