Tôi đang viết một ứng dụng dịch vụ web với gSoap và sử dụng Valgrind để kiểm tra các vấn đề về bộ nhớ.gsoap/valgrind; KHÔNG có rò rỉ nhưng lỗi bộ nhớ
Valgrind báo cáo không có rò rỉ nhưng thấy điều này lạ (ít nhất là đối với tôi) thông báo lỗi bộ nhớ:
==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)
Các không có rò rỉ là tin tốt nhưng, những sai sót này lại quan trọng? Theo tôi hiểu chúng được tạo ra trong stdsoap2.c (một tệp gSoap).
Cảm ơn.
CHỈNH SỬA: Cảm ơn câu trả lời của bạn. Như một số bạn đã nói với tôi rằng tôi đã có công cụ chưa được khởi tạo, đó là biến cấu trúc yêu cầu của tôi. Tôi đã sửa nó theo cách này:
struct ns1__myRequestType request;
memset(&request, 0, sizeof(struct ns1__myRequestType));
Bây giờ đầu ra của Valgrind là "sạch" :) cảm ơn rất nhiều.
Bạn có thể đăng mã của 'chính()' không? – hmjd
Có, chúng thường rất quan trọng và có thể là do mã của bạn đã chuyển các công cụ chưa được khởi tạo vào thư viện gSoap. – nos