Maison  >  Questions et réponses  >  le corps du texte

Comment trouver une erreur de tableau hors limites ?

(gdb) bt
#0  0x000000368d275fd5 in malloc_consolidate () from /lib64/libc.so.6
#1  0x000000368d279c28 in _int_malloc () from /lib64/libc.so.6
#2  0x000000368d27ab1c in malloc () from /lib64/libc.so.6
#3  0x000000368debd09d in operator new(unsigned long) () from /usr/lib64/libstdc++.so.6
#4  0x000000000040fbcd in __gnu_cxx::new_allocator<unsigned char>::allocate (this=0x7ffc7e0136d8, __n=4096)
    at /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ext/new_allocator.h:89
#5  0x000000000040f575 in std::_Vector_base<unsigned char, std::allocator<unsigned char> >::_M_allocate (this=0x7ffc7e0136d8, __n=4096)
    at /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_vector.h:140
#6  0x000000000040f186 in std::vector<unsigned char, std::allocator<unsigned char> >::_M_allocate_and_copy<unsigned char*> (this=0x7ffc7e0136d8, 
    __n=4096, __first=0x0, __last=0x0) at /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_vector.h:963
#7  0x000000000040e7c7 in std::vector<unsigned char, std::allocator<unsigned char> >::reserve (this=0x7ffc7e0136d8, __n=4096)
    at /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/vector.tcc:74
#8  0x00000000004cc616 in ByteBuffer::ByteBuffer (this=0x7ffc7e0136c0) at ../../../../src/shared/./util/ByteBuffer.h:19
#9  0x00000000004cb947 in ReplayMgr::SaveToDB (this=0x23a40d0, pBase=0x57a1160) at ./Replay/ReplayMgr.cpp:95

Baidu a vérifié qu'il se peut que le tableau ait franchi la frontière quelque part et a écrit la mémoire qui ne devrait pas être écrite.
Existe-t-il un bon moyen de vérifier où le tableau a franchi la frontière ?

我想大声告诉你我想大声告诉你2713 Il y a quelques jours1039

répondre à tous(2)je répondrai

  • 女神的闺蜜爱上我

    女神的闺蜜爱上我2017-06-07 09:26:17

    A quoi sert d'utiliser bt pour afficher la pile...

    Depuis que vous avez écrit le code, vérifiez quelques syntaxes, c'est le moyen le plus direct. Définissez quelques points d'arrêt clés et exécutez-les étape par étape, et vous trouverez rapidement le problème.

    De plus, la méthode dump est également un moyen efficace de résoudre des erreurs similaires.

    répondre
    0
  • phpcn_u1582

    phpcn_u15822017-06-07 09:26:17

    valgrind

    répondre
    0
  • Annulerrépondre