Address 0xc00a9553 out of bounds inside stl::vector class

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • e2point@yahoo.com

    Address 0xc00a9553 out of bounds inside stl::vector class

    hi,
    i got a program that is suppose to run 24x7x365. However after
    functioning for around 15 minutes, it crashes due to a segmentation
    fault. program is written in c++ and runs in RH Linux 4. When
    inspected one of the parameters of the crashing frame, i get the
    following output.

    NOTE : c1 is a std::vector

    (gdb) pvector c1
    elem[0]: $1 = {
    static npos = 4294967295,
    _M_dataplus = {
    <std::allocator <char>= {
    <__gnu_cxx::new _allocator<char >= {<No data fields>}, <No data
    fields>},
    members of
    std::basic_stri ng<char,std::ch ar_traits<char> ,std::allocator <char>
    >::_Alloc_hider :
    _M_p = 0xc00a9553 <Address 0xc00a9553 out of bounds>
    }
    }

    ...... and more elements like this ....

    according to this out put, _M_p member is not accessible because
    address 0xc00a9553 is out of bounds, and the only reason i can think
    of is a memory corruption. Is there any other reason for this to
    happen.




  • anon

    #2
    Re: Address 0xc00a9553 out of bounds inside stl::vector class

    e2point@yahoo.c om wrote:
    hi,
    i got a program that is suppose to run 24x7x365. However after
    functioning for around 15 minutes, it crashes due to a segmentation
    fault. program is written in c++ and runs in RH Linux 4. When
    inspected one of the parameters of the crashing frame, i get the
    following output.
    >
    NOTE : c1 is a std::vector
    >
    (gdb) pvector c1
    elem[0]: $1 = {
    static npos = 4294967295,
    _M_dataplus = {
    <std::allocator <char>= {
    <__gnu_cxx::new _allocator<char >= {<No data fields>}, <No data
    fields>},
    members of
    std::basic_stri ng<char,std::ch ar_traits<char> ,std::allocator <char>
    >::_Alloc_hider :
    _M_p = 0xc00a9553 <Address 0xc00a9553 out of bounds>
    }
    }
    >
    ..... and more elements like this ....
    >
    according to this out put, _M_p member is not accessible because
    address 0xc00a9553 is out of bounds, and the only reason i can think
    of is a memory corruption. Is there any other reason for this to
    happen.
    >
    >
    >
    >
    Instead of accessing the vector elements with the operator[], use at()
    method, and you will be able to easier find where is the problem.
    Otherwise use something like valgrind to determine cause

    Comment

    • Stefan Naewe

      #3
      Re: Address 0xc00a9553 out of bounds inside stl::vector class

      On 8/14/2008 12:28 PM, e2point@yahoo.c om wrote:
      hi,
      i got a program that is suppose to run 24x7x365. However after
      functioning for around 15 minutes, it crashes due to a segmentation
      fault. program is written in c++ and runs in RH Linux 4. When
      inspected one of the parameters of the crashing frame, i get the
      following output.
      >
      NOTE : c1 is a std::vector
      >
      (gdb) pvector c1
      elem[0]: $1 = {
      static npos = 4294967295,
      _M_dataplus = {
      <std::allocator <char>= {
      <__gnu_cxx::new _allocator<char >= {<No data fields>}, <No data
      fields>},
      members of
      std::basic_stri ng<char,std::ch ar_traits<char> ,std::allocator <char>
      >::_Alloc_hider :
      _M_p = 0xc00a9553 <Address 0xc00a9553 out of bounds>
      }
      }
      >
      ..... and more elements like this ....
      >
      according to this out put, _M_p member is not accessible because
      address 0xc00a9553 is out of bounds, and the only reason i can think
      of is a memory corruption. Is there any other reason for this to
      happen.
      You have an error at line 42

      S.
      --
      Stefan Naewe stefan dot naewe at atlas-elektronik dot com
      Don't top-post http://www.catb.org/~esr/jargon/html/T/top-post.html
      Plain text mails only, please http://www.expita.com/nomime.html

      Comment

      • Stefan Naewe

        #4
        Re: Address 0xc00a9553 out of bounds inside stl::vector class

        On 8/14/2008 12:33 PM, anon wrote:
        e2point@yahoo.c om wrote:
        >hi,
        >i got a program that is suppose to run 24x7x365. However after
        >functioning for around 15 minutes, it crashes due to a segmentation
        >fault. program is written in c++ and runs in RH Linux 4. When
        >inspected one of the parameters of the crashing frame, i get the
        >following output.
        >>
        >NOTE : c1 is a std::vector
        >>
        >(gdb) pvector c1
        >elem[0]: $1 = {
        > static npos = 4294967295,
        > _M_dataplus = {
        > <std::allocator <char>= {
        > <__gnu_cxx::new _allocator<char >= {<No data fields>}, <No data
        >fields>},
        > members of
        >std::basic_str ing<char,std::c har_traits<char >,std::allocato r<char>
        >>::_Alloc_hide r:
        > _M_p = 0xc00a9553 <Address 0xc00a9553 out of bounds>
        > }
        >}
        >>
        >..... and more elements like this ....
        >>
        >according to this out put, _M_p member is not accessible because
        >address 0xc00a9553 is out of bounds, and the only reason i can think
        >of is a memory corruption. Is there any other reason for this to
        >happen.
        >>
        >>
        >>
        >>
        >
        Instead of accessing the vector elements with the operator[], use at()
        method, and you will be able to easier find where is the problem.
        Otherwise use something like valgrind to determine cause
        I'd rather suggest following this


        to get a sensible answer.

        S.
        --
        Stefan Naewe stefan dot naewe at atlas-elektronik dot com
        Don't top-post http://www.catb.org/~esr/jargon/html/T/top-post.html
        Plain text mails only, please http://www.expita.com/nomime.html

        Comment

        • anon

          #5
          Re: Address 0xc00a9553 out of bounds inside stl::vector class

          Stefan Naewe wrote:
          On 8/14/2008 12:33 PM, anon wrote:
          >e2point@yahoo.c om wrote:
          >>hi,
          >>i got a program that is suppose to run 24x7x365. However after
          >>functioning for around 15 minutes, it crashes due to a segmentation
          >>fault. program is written in c++ and runs in RH Linux 4. When
          >>inspected one of the parameters of the crashing frame, i get the
          >>following output.
          >>>
          >>NOTE : c1 is a std::vector
          >>>
          >>(gdb) pvector c1
          >>elem[0]: $1 = {
          >> static npos = 4294967295,
          >> _M_dataplus = {
          >> <std::allocator <char>= {
          >> <__gnu_cxx::new _allocator<char >= {<No data fields>}, <No data
          >>fields>},
          >> members of
          >>std::basic_st ring<char,std:: char_traits<cha r>,std::allocat or<char>
          >>>::_Alloc_hid er:
          >> _M_p = 0xc00a9553 <Address 0xc00a9553 out of bounds>
          >> }
          >>}
          >>>
          >>..... and more elements like this ....
          >>>
          >>according to this out put, _M_p member is not accessible because
          >>address 0xc00a9553 is out of bounds, and the only reason i can think
          >>of is a memory corruption. Is there any other reason for this to
          >>happen.
          >>>
          >>>
          >>>
          >>>
          >Instead of accessing the vector elements with the operator[], use at()
          >method, and you will be able to easier find where is the problem.
          >Otherwise use something like valgrind to determine cause
          >
          I'd rather suggest following this
          >

          to get a sensible answer.
          Well... You are right, but I just gave him few useful advices regarding
          the subject, as I see no questions in his post.

          Comment

          • e2point@yahoo.com

            #6
            Re: Address 0xc00a9553 out of bounds inside stl::vector class

            On Aug 14, 4:29 pm, anon <a...@no.nowrot e:
            Stefan Naewe wrote:
            On 8/14/2008 12:33 PM, anon wrote:
            e2po...@yahoo.c om wrote:
            >hi,
            >i got a program that is suppose to run 24x7x365. However after
            >functioning for around 15 minutes, it crashes due to a segmentation
            >fault. program is written in c++ and runs in RH Linux 4. When
            >inspected one of the parameters of the crashing frame, i get the
            >following output.
            >
            >NOTE : c1 is a std::vector
            >
            >(gdb) pvector c1
            >elem[0]: $1 = {
            >  static npos = 4294967295,
            >  _M_dataplus = {
            >    <std::allocator <char>= {
            >      <__gnu_cxx::new _allocator<char >= {<No data fields>}, <No data
            >fields>},
            >    members of
            >std::basic_str ing<char,std::c har_traits<char >,std::allocato r<char>
            >>::_Alloc_hide r:
            >    _M_p = 0xc00a9553 <Address 0xc00a9553 out of bounds>
            >  }
            >}
            >
            >..... and more elements like this ....
            >
            >according to this out put, _M_p member is not accessible because
            >address 0xc00a9553 is out of bounds, and the only reason i can think
            >of is a memory corruption. Is there any other reason for this to
            >happen.
            >
            Instead of accessing the vector elements with the operator[], use at()
            method, and you will be able to easier find where is the problem.
            Otherwise use something like valgrind to determine cause
            >
            I'd rather suggest following this
            >>
            Well... You are right, but I just gave him few useful advices regarding
            the subject, as I see no questions in his post.
            OK, sorry if the post is not clear.

            (gdb) pvector c1
            elem[0]: $1 = {
            static npos = 4294967295,
            _M_dataplus = {
            <std::allocator <char>= {
            <__gnu_cxx::new _allocator<char >= {<No data fields>}, <No data
            fields>},
            members of
            std::basic_stri ng<char,std::ch ar_traits<char> ,std::allocator <char>
            >::_Alloc_hider :
            _M_p = 0xc00a9553 <Address 0xc00a9553 out of bounds>
            }

            }

            the above is a part of the output i got when i inspected a std::vector
            variable in gdb. As can be seen, _M_p member is not in an accessible
            memory location.
            And i think this is a result of a memory corruption, but wondering
            whether this can happen to any other reason than a memory corruption.

            Comment

            • peter koch

              #7
              Re: Address 0xc00a9553 out of bounds inside stl::vector class

              On 14 Aug., 12:28, e2po...@yahoo.c om wrote:
              hi,
              according to this out put, _M_p member is not accessible because
              address 0xc00a9553 is out of bounds, and the only reason i can think
              of is a memory corruption. Is there any other reason for this to
              happen.
              It likely is a memory corruption, but could also be accessing (1) the
              memory-location of an object that has ceased to exist or by (2)
              accessing something as an object that never was:

              (1)
              int* x = new int;
              delete x;
              *x = 1;

              (2)
              int* x
              *x = 1;

              Other stuff could provoke this error as well, but these are the most
              likely, IMHO.

              /Peter

              Comment

              • e2point@yahoo.com

                #8
                Re: Address 0xc00a9553 out of bounds inside stl::vector class

                On Aug 14, 6:32 pm, peter koch <peter.koch.lar ...@gmail.comwr ote:
                On 14 Aug., 12:28, e2po...@yahoo.c om wrote:
                >
                hi,
                according to this out put, _M_p member is not accessible because
                address 0xc00a9553 is out of bounds, and the only reason i can think
                of is a memory corruption. Is there any other reason for this to
                happen.
                >
                It likely is a memory corruption, but could also be accessing (1) the
                memory-location of an object that has ceased to exist or by (2)
                accessing something as an object that never was:
                >
                (1)
                int* x = new int;
                delete x;
                *x = 1;
                >
                (2)
                int* x
                *x = 1;
                >
                Other stuff could provoke this error as well, but these are the most
                likely, IMHO.
                >
                /Peter
                Hi,
                thanks for the reply.
                Yas i agree with you, but i think i can assume that this kind of
                errors are not present in the code because i had a through look in to
                the code to see anything like that is present. This forces me to
                consider this to be a memory corruption.
                To find the corrupting place, i ran the binary under valgrind memcheck
                tool. This slows down the process by almost 100, and after a long time
                (2 days of continuous operation), i got an error from valgrind saiying
                some memory allocation has failed. here is it:

                **10032** new/new[] failed and should throw an exception, but Valgrind
                cannot throw exceptions and so is aborting instead. Sorry.
                ==10032== at 0x4004631: VALGRIND_PRINTF _BACKTRACE (valgrind.h:369 5)
                ==10032== by 0x4005148: operator new[](unsigned)
                (vg_replace_mal loc.c:268)
                ==10032== by 0x8197F1B:
                _CORBA_Sequence _Octet::operato r<<=(cdrStream& ) (seqTemplatedec ls.h:
                168)
                ==10032== by 0x8195649:
                _0RL_cd_5DD34BC FA8420D37_11000 000::unmarshalA rguments(cdrStr eam&)
                (documentmessag es.h:123)
                ==10032== by 0x40EDD4E:
                omni::GIOP_S::R eceiveRequest(o mniCallDescript or&) (in /ld/work/c10728/
                esp/lib/libomniORB4.so. 0.7)
                ==10032== by 0x40CD50F: omniCallHandle: :upcall(omniSer vant*,
                omniCallDescrip tor&) (in /ld/work/c10728/esp/lib/libomniORB4.so. 0.7)
                ==10032== by 0x8192A49:
                interfaces::ale rtinginternal:: _impl_ae_sessio ns::_dispatch(o mniCallHandle&)
                (alertingintern alstub.cpp:1393 )
                ==10032== by 0x40BCAF5: omni::omniOrbPO A::dispatch(omn iCallHandle&,
                omniLocalIdenti ty*) (in /ld/work/c10728/esp/lib/libomniORB4.so. 0.7)
                ==10032== by 0x40A028C:
                omniLocalIdenti ty::dispatch(om niCallHandle&) (in /ld/work/c10728/esp/
                lib/libomniORB4.so. 0.7)
                ==10032== by 0x40ED210: omni::GIOP_S::h andleRequest() (in /ld/work/
                c10728/esp/lib/libomniORB4.so. 0.7)
                ==10032== by 0x40ED0B6: omni::GIOP_S::d ispatcher() (in /ld/work/
                c10728/esp/lib/libomniORB4.so. 0.7)
                ==10032== by 0x40E9DD1: omni::giopWorke r::real_execute () (in /ld/
                work/c10728/esp/lib/libomniORB4.so. 0.7)
                ==10032==
                ==10032== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 180174
                from 4)
                ==10032== malloc/free: in use at exit: 460,635,839 bytes in 22,318,880
                blocks.
                ==10032== malloc/free: 2,011,424,148 allocs, 1,989,105,267 frees,
                142,332,360,008 bytes allocated.
                ==10032== For a detailed leak analysis, rerun with: --leak-check=yes
                ==10032== For counts of detected errors, rerun with: -v


                the machine this has run had ebough of memory and im certain that the
                program does not have huge memory leaks. So im not sure why the 'new'
                operator has failed. Can it be a problem with valgrind it self?
                Can you recommend me a good memory corruption detection tool for Linux
                other than valgrind? im OK to recompile/re-link.
                I've already tried NJAMD and electric fence but was not that helpful.
                its enough if it can detect memory overflows.

                Thanks

                Comment

                Working...