PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Absturz, den ich nicht verstehe...



7.e.Q
27-10-2005, 11:16
Hi Leute,

kann eventuell mal jemand über diese Sourcen (http://7eq.ath.cx/repos/ISTS%20TCP%20BIOS/TimeSync/)schauen und mir sagen, wieso mein Programm in der Timer.cxx in Zeilte 123 mit folgender Fehlermeldung abstürzt:



Program received signal SIGSEGV, Segmentation fault.
0xb7e686c4 in std::string::_Rep::_M_grab () from /usr/lib/libstdc++.so.5
(gdb) bt
#0 0xb7e686c4 in std::string::_Rep::_M_grab () from /usr/lib/libstdc++.so.5
#1 0xb7e696bb in std::string::assign () from /usr/lib/libstdc++.so.5
#2 0xb7e68c10 in std::string::operator= () from /usr/lib/libstdc++.so.5
#3 0x0804a4fc in STimer::operator= (this=0x8055460, _ctor_arg=@0x8055480) at stl_algobase.h:241
#4 0x0804addc in __copy<STimer*, STimer*> (__first=0x8055480, __last=0x8055980, __result=0x8055460) at stl_algobase.h:241
#5 0x0804ada3 in __copy_aux2<STimer*, STimer*> (__first=0x8055480, __last=0x8055980, __result=0x8055460) at stl_algobase.h:260
#6 0x0804ad56 in __copy_ni2<STimer*, __gnu_cxx::__normal_iterator<STimer*, std::vector<STimer, std::allocator<STimer> > > > (__first=0x8055480, __last=0x8055980, __result={<std::iterator<std::random_access_iterator_tag, STimer, int, STimer*, STimer&>> = {<No data fields>}, _M_current = 0x8055460}) at stl_algobase.h:289
#7 0x0804ad1d in __copy_ni1<__gnu_cxx::__normal_iterator<STimer*, std::vector<STimer, std::allocator<STimer> > >, __gnu_cxx::__normal_iterator<STimer*, std::vector<STimer, std::allocator<STimer> > > > (__first={<std::iterator<std::random_access_iterator_tag, STimer, int, STimer*, STimer&>> = {<No data fields>}, _M_current = 0x8055480}, __last={<std::iterator<std::random_access_iterator_tag, STimer, int, STimer*, STimer&>> = {<No data fields>}, _M_current = 0x8055980}, __result={<std::iterator<std::random_access_iterator_tag, STimer, int, STimer*, STimer&>> = {<No data fields>}, _M_current = 0x8055460}) at stl_algobase.h:314
#8 0x0804acd1 in copy<__gnu_cxx::__normal_iterator<STimer*, std::vector<STimer, std::allocator<STimer> > >, __gnu_cxx::__normal_iterator<STimer*, std::vector<STimer, std::allocator<STimer> > > > (__first={<std::iterator<std::random_access_iterator_tag, STimer, int, STimer*, STimer&>> = {<No data fields>}, _M_current = 0x8055480}, __last={<std::iterator<std::random_access_iterator_tag, STimer, int, STimer*, STimer&>> = {<No data fields>}, _M_current = 0x8055980}, __result={<std::iterator<std::random_access_iterator_tag, STimer, int, STimer*, STimer&>> = {<No data fields>}, _M_current = 0x8055460}) at stl_algobase.h:349
#9 0x0804a8d4 in std::vector<STimer, std::allocator<STimer> >::erase (this=0x804cf50, __position={<std::iterator<std::random_access_iterator_tag, STimer, int, STimer*, STimer&>> = {<No data fields>}, _M_current = 0x8055460}) at vector.tcc:107
#10 0x0804a083 in CTimerList::Tick (this=0x804cf50) at TimeSync/Timer.cxx:123
#11 0x08049706 in main (argc=1, argv=0xbfd2af34) at TimeSync/TimeSync.cxx:214
(gdb)



Ich finde den verdammten Fehler nicht... *grmpf* Eventuell wieder das mit dem Wald und den Bäumen...

Vielen Dank!

Gruß,
Hendrik

anda_skoa
27-10-2005, 11:45
Vermutlich ist itTimers nicht mehr gültig, nachdem du ihn gelöscht hast, oder er zeigt bereits auf das nächste Element, d.h. itTimers ++ könnte über den erlaubten Bereich hinausfahren.

Ciao,
_

7.e.Q
27-10-2005, 12:24
Hab's hinbekommen... arbeite nicht mehr mit Zeigern auf Iteratoren und mit std::vector, sondern mit std::list und mit Referenzen... geht besser, sieht auch sauberer aus.

@anda_skoa: ja, sowas war das. Jetzt funktioniert's auf jeden Fall. Danke trotzdem! :)