2012-08-30 3 views
7

gSoap으로 웹 서비스 클라이언트를 작성하고 Valgrind를 사용하여 메모리 문제를 확인합니다. 노 누출이 오류가 중요하다, 좋은 소식은 없지만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) 

:

는 Valgrind의는 NO 누수를보고 있지만 (적어도 나를 위해) 이상한 메모리 오류 메시지를 보여줍니다? 내가 알기 론 그들은 stdsoap2.c (gSoap 파일)에서 생성된다.

감사합니다.

편집 : 답변 해 주셔서 감사합니다. 당신 중 일부가 물건을 초기화하지 않았다는 말을하니, 그것은 요청 변수의 구조체입니다.

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

지금 Valgrind의의 출력이 많은 감사합니다 :) "깨끗한"입니다 : 나는 이런 식으로 해결했습니다.

+0

'main()'코드를 게시 할 수 있습니까? – hmjd

+2

예 일반적으로 매우 중요하며 코드가 초기화되지 않은 항목을 gSoap 라이브러리에 전달했기 때문일 수 있습니다. – nos

답변

3

기본적으로 초기화되지 않은 변수를 기반으로 수행되는 일부 분기가 있음을 나타냅니다. 스택에 할당되고 값이 할당되지 않은 라이브러리 함수 범위의 로컬 변수 인 자동 변수 일 수도 있습니다 (if, while, switch 또는 기타 분기 표현식 형태로 사용됨). 일반적으로 이것은 정의되지 않은 동작을 초래할 수 있기 때문에해야 할 일이 아니지만 오류가 라이브러리 내부에있는 경우 작성자는 일부 유형의 메모리 오버레이 연산을 수행 할 수 있습니다. 표준 C 구문으로 명시 적으로 초기화하지 않고 비공식적으로 "초기화"합니다. 또 다른 가능성은 초기화되지 않은 변수에 대한 포인터를 라이브러리 함수 중 하나에 전달할 수 있기 때문에 프로그래밍 형식이 좋지 않아 예측할 수없는 결과 나 보안 위험이 발생할 수 있습니다.