Avatar billede emmek Nybegynder
09. oktober 2006 - 11:56 Der er 1 kommentar og
1 løsning

STL Map iterator giver core dump efter ~24 timers kørsel..

Hej!

Har noget software der kører på FreeBSD (unix), som ikke virker heeeelt endnu. Det dump'er core efter ca. 24 timer, plus-minus 5 timer. Altså noget tilfældigt.

Jeg har lagt et backtrace af fejlen på http://pastebin.com/800571

Derudover har jeg kørt det igennem valgrind (linux tool) som rapporterer om fejl på præcis det sted i koden der forårsager coredumpet. Output er på http://pastebin.com/801278

Jeg har stiret mig temmeligt blind på dette efterhånden. Håber nogen herinde kan pege mig i den rigtige retning.

/steffen
Avatar billede segmose Nybegynder
09. oktober 2006 - 13:06 #1
Hmm, det står en masse med pthead, hvilket giver anledning til at spørge om er STL Map thread safe, hvis ikke hvordan har du lavet den thread safe.

Eller kunne lidt kode være rar at se på, din Map definition og der hvor det går galt, evt. den kaldende funktion til der hvor det går galt.

ps. dit output link giver ikke noget her hos mig?
Avatar billede emmek Nybegynder
09. oktober 2006 - 15:57 #2
Fixed..
Det dur ikke at lave:
tyepdef std::map<int, int> mp;
for(mp::iterator i = m.begin();i != m.end();i++)
{
  m.erase(i);
}

Det virker, men det er kun tilfældigt. Iteratoren er stadig gyldig, men next og reverse er placeret i frigjort hukommelse, hvorfor de kan blive overskrevet. Tilfældigvis sker det åbenbart først efter ~24 timer.

pastebin.com er temmeligt langsom, men kommer som regel 2 forsøg.

/steffen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester