FW: ostringstream: problems with str() function
fl
foldy@rmki.kfki.hu
Fri Aug 25 06:57:00 GMT 2006
>
> Hi,
>
> I had a crash in our software, which occured randomly. The valgrind logs
> and the stack trace pointed to a code snippet, which uses ostringstream
> for data conversion. (int -> string, float -> string, double-> string).
> After changing the ostringstream conversion to sprintf, the crash in the
> application no more occured and the valgrind log was clear as well. It
> seems the problem is in the str() function of ostringstream.
> Consider the following test program in order to reproduce the bug:
>
> #include <iostream>
> #include <strstream>
> #include <sstream>
> #include <vector>
> #include <string>
>
> int main()
> {
>
> std::vector<std::string> v;
> {
> std::ostringstream sstr;
> sstr << (double)1.12;
> v.push_back(sstr.str());
> }
>
> return 1;
> }
>
>
> The problem occured with gcc 3.4.2 and 3.4.4 compilers with -O2
> optimization. Test program had been running both on 32 and 64 bit
> architecture.
> With O1 and O0 no problems was logged by valgrind. 3.2 and 4.0 compilers
> the program was bug-free as well.
> $ g++ -g -O2 -D__STL_DEBUG -DDEBUG test.c
>
> valgrind tool signs the following problems:
> ==5443== Conditional jump or move depends on uninitialised value(s)
> ==5443== at 0x11CD3445: std::string::string(std::string const&) (in
> /usr/lib64/libstdc++.so.6.0.7)
> ==5443== by 0x401907: std::vector<std::string,
> std::allocator<std::string>
> >::_M_insert_aux(__gnu_cxx::__normal_iterator<std::string*,
> std::vector<std::string, std::allocator<std::string> > >, std::string
> const&) (new:92)
> ==5443== by 0x40152E: main (stl_vector.h:330)
> ==5443==
> ==5443== Conditional jump or move depends on uninitialised value(s)
> ==5443== at 0x401585: main (basic_string.h:215)
> ==5443==
> ==5443== Conditional jump or move depends on uninitialised value(s)
> ==5443== at 0x401427: main (basic_string.h:215)
> ==5443==
> ==5443== ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 10 from 5)
> ==5443== malloc/free: in use at exit: 0 bytes in 0 blocks.
> ==5443== malloc/free: 3 allocs, 3 frees, 574 bytes allocated.
> ==5443== For counts of detected errors, rerun with: -v
> ==5443== No malloc'd blocks -- no leaks are possible.
>
> Do you have any idea for this issue?
>
> Thanks and regards,
> Laszlo Jordan
>
probably a library version mismatch, libstdc++.so.6.0.7 belongs to GCC
4.1.0.
regards,
lajos
More information about the Gcc
mailing list