2013-07-27 20 views
15

मैं सिर्फ एक बड़ी परियोजना डिबगिंग कर रहा हूँ और और इस त्रुटिदूषित डबल-लिंक्ड सूची?

*** glibc detected *** p_appmanager/obj/appmanager: corrupted double-linked list: 0x08325e18 ** 

मैं valgrind साथ कोड डिबग करने की कोशिश की है हो रही है, लेकिन मैं इस उपकरण के साथ बहुत परिचित नहीं हूँ। इसलिए यदि आप उनसे कुछ भी पता कर सकते हैं तो कृपया मुझे लॉग डंप कर रहे हैं कृपया मुझे बताएं।

क्या कोई बता सकता है कि निम्न त्रुटि संदेश का क्या अर्थ हो सकता है?

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

उत्तर

24

ऐसा लगता है कि एक धागे की तरह मुद्रण डेटा (char* चरित्र डेटा) कि पहले से ही मुख्य (या अन्य) धागे पर रिहा कर दिया गया था।

अधिक विशिष्ट रूप से, Parser::parsestd::string एस vector बनाता है।


संपादित टिप्पणी में अनुरोध के रूप में, यह मैं क्या पढ़ा है, [highlights] साथ:

==2181==[Invalid read of size 1]
==2181==at 0x402C658: strlen (in /usr/lib/valgrind/vg...
==2181==by 0x40FCC2D: std::basic_ostream<char, std::c...
==2181==by 0x4054D4B: start_thread (pthread_create.c:...
==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...
==2181==by 0x410899A: std::string::_Rep::_M_destroy(s...
==2181==by 0x4071B37: void std::_Destroy_aux<false>::...
==2181==by 0x40717DC: void std::_Destroy<std::string*...
==2181==by 0x4071041: void std::_Destroy<std::string*...
==2181== by 0x407088A: std::vector<std::string, std::a...[::~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 ...
==2181==by 0x804CB99: fifoThread(void*) (in /home/cle...
==2181==by 0x4054D4B: start_thread (pthread_create.c:...
==2181==by 0x4269DDD: clone (clone.S:130

और मैंने देखा कि अन्य बैकट्रैक सभी ने समान पैटर्न को हाइलाइट किया है।


जाहिर है, कुछ धागे (रों) आरंभ करने, और वे इन तार के लिए संदर्भ (में) पारित कर रहे हैं। हालांकि, चूंकि वेक्टर Parser::parse (संभवतः एक स्वचालित चर या स्पष्ट रूप से हटाया गया) के लिए स्थानीय है, इसलिए संदर्भ अब मान्य नहीं हैं (उदा। उस समय std::ostream::operator<<(std::ostream&, const char*) का उपयोग करके तारों को स्ट्रीम किया जा रहा है)।

दुःख की बात है स्टैक ट्रेस काफी प्रदर्शित नहीं करता है क्या नाम/वस्तु मॉड्यूल हमलावर पंक्ति है, लेकिन आप इसे

संपादित (start_thread की उपस्थिति के कारण) एक अलग थ्रेड पर रहता है देख सकते हैं जाहिर है , थ्रेड (0) संदर्भstring एस (वेक्टर से) पर लेते हैं क्योंकि धागा भी स्ट्रिंग को किसी अन्य string पर असाइन करने का प्रयास कर रहा है।

यह संकेत दे सकता है कि प्रोग्रामर इस तथ्य से अवगत था कि प्रतिबिंब विश्वसनीय नहीं था और इसे थ्रेड-स्थानीय चर में कॉपी करने का प्रयास करता है। हो सकता है कि यह केवल दौड़ की स्थिति शामिल है और string एस स्थानीय प्रतिलिपि के काम के लिए काफी देर तक नहीं रहते हैं।

आईओओ। , एक ही रेस स्थिति होती है, तो

#include <future> 
#include <algorithm> 
#include <sstream> 
#include <iterator> 
#include <iostream> 

using namespace std; 

// sample: return the largest integer value or 42 
int some_background_worker(vector<string> const& ref_data) 
{ 
    if (ref_data.empty()) return 42; 

    vector<int> values(ref_data.size()); 
    transform(begin(ref_data), end(ref_data), begin(values), 
      [](string const& s) { return stoi(s); }); 
    return *max_element(begin(values), end(values)); 
} 

struct Parser 
{ 
    future<int> parse(string const& msg) const 
    { 
     istringstream iss(msg); 
     istream_iterator<string> f(iss), l; 

     const vector<string> data { f, l }; 

     // now dispatch a thread to do the work 
     return async(some_background_worker, ref(data)); 
    } 
}; 

int main() // mimicks your "fifoThread" function 
{ 
    // we use a simple vector to stub your fifo queue: 
    const std::vector<string> fifoQueue { "1 3 9 -1 2", "32389 3102 -34 -888", "-42 -889", "" }; 

    vector<future<int>> results; 

    { 
     Parser parser; 
     for(auto& msg : fifoQueue) 
      results.push_back(parser.parse(msg)); 
    } 

    // all parser data has been throroughly destroyed, before we might even 
    // start the workers 
    for(auto& fut: results) 
     std::cout << "result of worker: " << fut.get() << "\n"; 
} 

यहाँ एक संदर्भ के रूप में "जल्द ही होने वाली है-बासी करने के लिए" डेटा धागा करने के लिए पारित कर दिया है करने के लिए: ऐसा लगता है कि एक धागा इस तरह के रूप में शुरू किया जा रहा है

async(some_background_worker, ref(data)); 

यह मेरे सिस्टम पर bad_alloc के साथ दुर्घटनाग्रस्त हो जाता है (जो फर्जी है, लेकिन पूरी तरह से ठीक अपरिभाषित व्यवहार)।

जैसा कि मैंने ऊपर कहा, std :: स्ट्रिंग :: की तरह स्थानीय स्तर पर डेटा की प्रतिलिपि धागा प्रयास का संकेत हो सकता, कॉल आवंटित:

vector<string> local_copy(ref_data); 

लेकिन उस होगा अभी भी एक हो डेटा रेस, क्योंकि (स्पष्ट सिंक्रनाइज़ेशन के बिना) इस बात की कोई गारंटी नहीं है कि ref_data उस बिंदु पर भी मान्य है।


इसे ठीक करें द्वारा बजाय थ्रेड में डेटा ले जाने:

int some_background_worker(vector<string> data); 

// and then, in parse(...): 
    async(some_background_worker, std::move(data)); 

अब, अपने सिस्टम पर, यह चलाता है और प्रिंट

result of worker: 9 
result of worker: 32389 
result of worker: -42 
result of worker: 42 

की उम्मीद पूरी तरह से के रूप में। इसे live at Coliru

+2

बहुत धन्यवाद। आपने भ्रष्टाचार होने पर सटीक स्थान को सही स्थान दिया है। "अधिक विशिष्ट रूप से, पार्सर :: पार्स std :: तारों का एक वेक्टर बनाता है।" –

+0

लेकिन आप क्या कहते हैं, मेरा मतलब है कि आप मुझे उन संदेशों का चुनाव कर सकते हैं ताकि अगली बार मुझे आपकी मदद की आवश्यकता न हो। –

+2

@AmitBhaira मैंने जवाब संपादित किया है कि मैं बैकट्रैस कैसे पढ़ता हूं, *** ['हाइलाइट्स] *** *** के साथ जो मेरे विश्लेषण को ट्रिगर करता है दिखा रहा है। तो, निष्पक्षता में, यह भ्रष्टाचार के स्रोत को इंगित करने वाला मूल्यवान था :) – sehe

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