liste double-liée corrompue?
Je suis juste le débogage d'un grand projet et de et obtenez cette erreur
*** glibc detected *** p_appmanager/obj/appmanager: corrupted double-linked list: 0x08325e18 **
J'ai essayé de déboguer le code avec valgrind, mais je ne suis pas très familier avec cet outil. Donc, je suis le dumping les journaux d'ici, si vous pouvez trouver quelque chose d'eux s'il vous plaît laissez-moi savoir.
Quelqu'un peut-il expliquer ce que le message d'erreur suivant peut signifier?
==2181== Invalid read of size 1
==2181== at 0x402C658: strlen (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x40FCC2D: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181== Address 0x4359234 is 12 bytes inside a block of size 21 free'd
==2181== at 0x402ACFC: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x410899A: std::string::_Rep::_M_destroy(std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4071B37: void std::_Destroy_aux<false>::__destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x40717DC: void std::_Destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x4071041: void std::_Destroy<std::string*, std::string>(std::string*, std::string*, std::allocator<std::string>&) (in /usr/lib/libparser.so)
==2181== by 0x407088A: std::vector<std::string, std::allocator<std::string> >::~vector() (in /usr/lib/libparser.so)
==2181== by 0x406F497: Parser::parse(std::string) (in /usr/lib/libparser.so)
==2181== by 0x40729E2: getMessage(int, Message**) (in /usr/lib/libparser.so)
==2181== by 0x804CB99: fifoThread(void*) (in /home/cleanhands/SBISSW (2)/p_appmanager/obj/appmanager)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181==
==2181== Invalid read of size 1
==2181== at 0x402C663: strlen (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x40FCC2D: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181== Address 0x4359235 is 13 bytes inside a block of size 21 free'd
==2181== at 0x402ACFC: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x410899A: std::string::_Rep::_M_destroy(std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4071B37: void std::_Destroy_aux<false>::__destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x40717DC: void std::_Destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x4071041: void std::_Destroy<std::string*, std::string>(std::string*, std::string*, std::allocator<std::string>&) (in /usr/lib/libparser.so)
==2181== by 0x407088A: std::vector<std::string, std::allocator<std::string> >::~vector() (in /usr/lib/libparser.so)
==2181== by 0x406F497: Parser::parse(std::string) (in /usr/lib/libparser.so)
==2181== by 0x40729E2: getMessage(int, Message**) (in /usr/lib/libparser.so)
==2181== by 0x804CB99: fifoThread(void*) (in /home/cleanhands/SBISSW (2)/p_appmanager/obj/appmanager)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181==
==2181== Invalid read of size 4
==2181== at 0x402DA08: memcpy (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x4106850: std::basic_streambuf<char, std::char_traits<char> >::xsputn(char const*, int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x40D8CDF: std::basic_filebuf<char, std::char_traits<char> >::xsputn(char const*, int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x40FC9AA: std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x40FCC3D: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181== Address 0x4359234 is 12 bytes inside a block of size 21 free'd
==2181== at 0x402ACFC: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x410899A: std::string::_Rep::_M_destroy(std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4071B37: void std::_Destroy_aux<false>::__destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x40717DC: void std::_Destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x4071041: void std::_Destroy<std::string*, std::string>(std::string*, std::string*, std::allocator<std::string>&) (in /usr/lib/libparser.so)
==2181== by 0x407088A: std::vector<std::string, std::allocator<std::string> >::~vector() (in /usr/lib/libparser.so)
==2181== by 0x406F497: Parser::parse(std::string) (in /usr/lib/libparser.so)
==2181== by 0x40729E2: getMessage(int, Message**) (in /usr/lib/libparser.so)
==2181== by 0x804CB99: fifoThread(void*) (in /home/cleanhands/SBISSW (2)/p_appmanager/obj/appmanager)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181==
==2181== Invalid read of size 2
==2181== at 0x402DA60: memcpy (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x4106850: std::basic_streambuf<char, std::char_traits<char> >::xsputn(char const*, int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x40D8CDF: std::basic_filebuf<char, std::char_traits<char> >::xsputn(char const*, int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x40FC9AA: std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x40FCC3D: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181== Address 0x4359238 is 16 bytes inside a block of size 21 free'd
==2181== at 0x402ACFC: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x410899A: std::string::_Rep::_M_destroy(std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4071B37: void std::_Destroy_aux<false>::__destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x40717DC: void std::_Destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x4071041: void std::_Destroy<std::string*, std::string>(std::string*, std::string*, std::allocator<std::string>&) (in /usr/lib/libparser.so)
==2181== by 0x407088A: std::vector<std::string, std::allocator<std::string> >::~vector() (in /usr/lib/libparser.so)
==2181== by 0x406F497: Parser::parse(std::string) (in /usr/lib/libparser.so)
==2181== by 0x40729E2: getMessage(int, Message**) (in /usr/lib/libparser.so)
==2181== by 0x804CB99: fifoThread(void*) (in /home/cleanhands/SBISSW (2)/p_appmanager/obj/appmanager)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181==
==2181== Invalid read of size 1
==2181== at 0x402DA90: memcpy (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x4106850: std::basic_streambuf<char, std::char_traits<char> >::xsputn(char const*, int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x40D8CDF: std::basic_filebuf<char, std::char_traits<char> >::xsputn(char const*, int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x40FC9AA: std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x40FCC3D: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181== Address 0x435923a is 18 bytes inside a block of size 21 free'd
==2181== at 0x402ACFC: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x410899A: std::string::_Rep::_M_destroy(std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4071B37: void std::_Destroy_aux<false>::__destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x40717DC: void std::_Destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x4071041: void std::_Destroy<std::string*, std::string>(std::string*, std::string*, std::allocator<std::string>&) (in /usr/lib/libparser.so)
==2181== by 0x407088A: std::vector<std::string, std::allocator<std::string> >::~vector() (in /usr/lib/libparser.so)
==2181== by 0x406F497: Parser::parse(std::string) (in /usr/lib/libparser.so)
==2181== by 0x40729E2: getMessage(int, Message**) (in /usr/lib/libparser.so)
==2181== by 0x804CB99: fifoThread(void*) (in /home/cleanhands/SBISSW (2)/p_appmanager/obj/appmanager)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181==
==2181== Invalid read of size 1
==2181== at 0x402DA9C: memcpy (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x4106850: std::basic_streambuf<char, std::char_traits<char> >::xsputn(char const*, int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x40D8CDF: std::basic_filebuf<char, std::char_traits<char> >::xsputn(char const*, int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x40FC9AA: std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x40FCC3D: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181== Address 0x43f0936 is 14 bytes inside a block of size 21 free'd
==2181== at 0x402ACFC: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x410899A: std::string::_Rep::_M_destroy(std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4071B37: void std::_Destroy_aux<false>::__destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x40717DC: void std::_Destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x4071041: void std::_Destroy<std::string*, std::string>(std::string*, std::string*, std::allocator<std::string>&) (in /usr/lib/libparser.so)
==2181== by 0x407088A: std::vector<std::string, std::allocator<std::string> >::~vector() (in /usr/lib/libparser.so)
==2181== by 0x406F497: Parser::parse(std::string) (in /usr/lib/libparser.so)
==2181== by 0x40729E2: getMessage(int, Message**) (in /usr/lib/libparser.so)
==2181== by 0x804CB99: fifoThread(void*) (in /home/cleanhands/SBISSW (2)/p_appmanager/obj/appmanager)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181==
stop tablet
==2181== Invalid read of size 1
==2181== at 0x402C658: strlen (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x4108EF1: std::string::operator=(char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181== Address 0x45b2e14 is 12 bytes inside a block of size 21 free'd
==2181== at 0x402ACFC: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x410899A: std::string::_Rep::_M_destroy(std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4071B37: void std::_Destroy_aux<false>::__destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x40717DC: void std::_Destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x4071041: void std::_Destroy<std::string*, std::string>(std::string*, std::string*, std::allocator<std::string>&) (in /usr/lib/libparser.so)
==2181== by 0x407088A: std::vector<std::string, std::allocator<std::string> >::~vector() (in /usr/lib/libparser.so)
==2181== by 0x406F497: Parser::parse(std::string) (in /usr/lib/libparser.so)
==2181== by 0x40729E2: getMessage(int, Message**) (in /usr/lib/libparser.so)
==2181== by 0x804CB99: fifoThread(void*) (in /home/cleanhands/SBISSW (2)/p_appmanager/obj/appmanager)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181==
==2181== Invalid read of size 1
==2181== at 0x402C663: strlen (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x4108EF1: std::string::operator=(char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181== Address 0x45b2e15 is 13 bytes inside a block of size 21 free'd
==2181== at 0x402ACFC: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x410899A: std::string::_Rep::_M_destroy(std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4071B37: void std::_Destroy_aux<false>::__destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x40717DC: void std::_Destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x4071041: void std::_Destroy<std::string*, std::string>(std::string*, std::string*, std::allocator<std::string>&) (in /usr/lib/libparser.so)
==2181== by 0x407088A: std::vector<std::string, std::allocator<std::string> >::~vector() (in /usr/lib/libparser.so)
==2181== by 0x406F497: Parser::parse(std::string) (in /usr/lib/libparser.so)
==2181== by 0x40729E2: getMessage(int, Message**) (in /usr/lib/libparser.so)
==2181== by 0x804CB99: fifoThread(void*) (in /home/cleanhands/SBISSW (2)/p_appmanager/obj/appmanager)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181==
==2181== Invalid read of size 1
==2181== at 0x402DAEA: memcpy (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x4108C7A: std::string::_M_replace_safe(unsigned int, unsigned int, char const*, unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4108CF8: std::string::assign(char const*, unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4108F05: std::string::operator=(char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181== Address 0x45b2e19 is 17 bytes inside a block of size 21 free'd
==2181== at 0x402ACFC: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x410899A: std::string::_Rep::_M_destroy(std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4071B37: void std::_Destroy_aux<false>::__destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x40717DC: void std::_Destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x4071041: void std::_Destroy<std::string*, std::string>(std::string*, std::string*, std::allocator<std::string>&) (in /usr/lib/libparser.so)
==2181== by 0x407088A: std::vector<std::string, std::allocator<std::string> >::~vector() (in /usr/lib/libparser.so)
==2181== by 0x406F497: Parser::parse(std::string) (in /usr/lib/libparser.so)
==2181== by 0x40729E2: getMessage(int, Message**) (in /usr/lib/libparser.so)
==2181== by 0x804CB99: fifoThread(void*) (in /home/cleanhands/SBISSW (2)/p_appmanager/obj/appmanager)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181==
==2181== Invalid read of size 4
==2181== at 0x402DB18: memcpy (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x4108C7A: std::string::_M_replace_safe(unsigned int, unsigned int, char const*, unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4108CF8: std::string::assign(char const*, unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4108F05: std::string::operator=(char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181== Address 0x45b2e14 is 12 bytes inside a block of size 21 free'd
==2181== at 0x402ACFC: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x410899A: std::string::_Rep::_M_destroy(std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4071B37: void std::_Destroy_aux<false>::__destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x40717DC: void std::_Destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x4071041: void std::_Destroy<std::string*, std::string>(std::string*, std::string*, std::allocator<std::string>&) (in /usr/lib/libparser.so)
==2181== by 0x407088A: std::vector<std::string, std::allocator<std::string> >::~vector() (in /usr/lib/libparser.so)
==2181== by 0x406F497: Parser::parse(std::string) (in /usr/lib/libparser.so)
==2181== by 0x40729E2: getMessage(int, Message**) (in /usr/lib/libparser.so)
==2181== by 0x804CB99: fifoThread(void*) (in /home/cleanhands/SBISSW (2)/p_appmanager/obj/appmanager)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181==
Success:: tablet process terminated Successfully.
CONSOLE>start tablet
Success:: tablet Process Created Successfully
CONSOLE>stop tablet
==2181== Invalid read of size 4
==2181== at 0x402DA08: memcpy (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x4108C7A: std::string::_M_replace_safe(unsigned int, unsigned int, char const*, unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4108CF8: std::string::assign(char const*, unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4108F05: std::string::operator=(char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181== Address 0x45dd8c4 is 12 bytes inside a block of size 21 free'd
==2181== at 0x402ACFC: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x410899A: std::string::_Rep::_M_destroy(std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4071B37: void std::_Destroy_aux<false>::__destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x40717DC: void std::_Destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x4071041: void std::_Destroy<std::string*, std::string>(std::string*, std::string*, std::allocator<std::string>&) (in /usr/lib/libparser.so)
==2181== by 0x407088A: std::vector<std::string, std::allocator<std::string> >::~vector() (in /usr/lib/libparser.so)
==2181== by 0x406F497: Parser::parse(std::string) (in /usr/lib/libparser.so)
==2181== by 0x40729E2: getMessage(int, Message**) (in /usr/lib/libparser.so)
==2181== by 0x804CB99: fifoThread(void*) (in /home/cleanhands/SBISSW (2)/p_appmanager/obj/appmanager)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181==
==2181== Invalid read of size 2
==2181== at 0x402DA60: memcpy (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x4108C7A: std::string::_M_replace_safe(unsigned int, unsigned int, char const*, unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4108CF8: std::string::assign(char const*, unsigned int) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4108F05: std::string::operator=(char const*) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181== Address 0x45dd8c8 is 16 bytes inside a block of size 21 free'd
==2181== at 0x402ACFC: operator delete(void*) (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==2181== by 0x410899A: std::string::_Rep::_M_destroy(std::allocator<char> const&) (in /usr/lib/i386-linux-gnu/libstdc++.so.6.0.16)
==2181== by 0x4071B37: void std::_Destroy_aux<false>::__destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x40717DC: void std::_Destroy<std::string*>(std::string*, std::string*) (in /usr/lib/libparser.so)
==2181== by 0x4071041: void std::_Destroy<std::string*, std::string>(std::string*, std::string*, std::allocator<std::string>&) (in /usr/lib/libparser.so)
==2181== by 0x407088A: std::vector<std::string, std::allocator<std::string> >::~vector() (in /usr/lib/libparser.so)
==2181== by 0x406F497: Parser::parse(std::string) (in /usr/lib/libparser.so)
==2181== by 0x40729E2: getMessage(int, Message**) (in /usr/lib/libparser.so)
==2181== by 0x804CB99: fifoThread(void*) (in /home/cleanhands/SBISSW (2)/p_appmanager/obj/appmanager)
==2181== by 0x4054D4B: start_thread (pthread_create.c:308)
==2181== by 0x4269DDD: clone (clone.S:130)
==2181==
source d'informationauteur Amit Bhaira
Vous devez vous connecter pour publier un commentaire.
Il ressemble à un fil de données d'impression (
char*
données de type caractère) qui a déjà été libéré sur-le-main (ou un autre) thread.Plus spécifiquement,
Parser::parse
construit unevector
destd::string
s.MODIFIER Comme demandé dans les commentaires, c'est ce que j'ai lu, avec [
highlights]
:Et j'ai remarqué l'autre backtracecs tous mis l'accent sur le même modèle.
Apparemment, certains thread(s) de commencer, et ils sont passés à des références (en)à ces chaînes. Cependant, depuis le vecteur local à
Parser::parse
(probablement une variable automatique, ou explicitement supprimé), les références ne sont plus valides (par exemple, au moment où les chaînes sont diffusées en continu à l'aide destd::ostream::operator<<(std::ostream&, const char*)
).Malheureusement, la trace de la pile n'est pas tout montrer ce nom/objet module contient la ligne incriminée, mais vous pouvez le voir, il vit sur un thread séparé (en raison de la présence de
start_thread
)Modifier Apparemment, le fil(s) de prendre un référence à la
string
s (à partir du vecteur) parce que le fil est aussi essayez d'affecter les cordes à l'autrestring
.Cela peut indiquer que le programmeur était conscient du fait que la référence n'était pas fiable, et essaie de le copier sur une variable locale de thread. Peut-être que c'est juste qu'il y a une condition de concurrence concernées et la
string
s ne même pas vivre assez longtemps pour que la copie locale de travailler.OIE. Il semblerait qu'un thread est démarré en tant que tel:
Ici, la même condition de concurrence se produit, comme une référence à "bientôt-à-être vicié de données" est passé à la discussion:
Il se bloque avec
bad_alloc
sur mon système (ce qui est faux, mais parfaitement bien à un Comportement indéterminé).Comme je l'ai dit ci-dessus, le std::string::attribuer appels peut indiquer le thread tente de copier les données localement, comme:
Mais qui encore être un données courseparce que (sans synchronisation explicite) il n'y a aucune garantie que
ref_data
est valide, même à ce point.Fixer par la déplacement les données dans le thread au lieu de cela:
Maintenant, sur mon système, il s'exécute et imprime
pleinement comme prévu. Voir fonctionner vivre à Coliru