Avatar billede evilfish Nybegynder
19. november 2008 - 09:27 Der er 6 kommentarer og
1 løsning

Segmentation fault i constructor før udførelse

Hej eksperter

Jeg får en segmentation fault i mit program, som jeg ikke kan finde en forklaring på. Programmet kørte fint i går, men idag fejler det. Jeg har ikke rettet noget som helst.

Jeg har en klasse som hedder IPTVThread. Denne opretter jeg således:

int main(int argc, char** argv)
{
mfunc_iptv = new IPTVThread(); <-- klassen

Det er den første klasse der bliver oprettet i hele programmet. Det er præcis på denne linie fejler sker, så jeg starter min debugger og følger programmet udvikling. Jeg når til linien og går in i selve constructoren. Denne ser således ud:

IPTVThread::IPTVThread() <--- SEG FAULT her!
{
    dataInstance = AppData::getInstance();
    //CalculationThread calculationThread;
    calculationThread.start();
    running = false;
}

Men som i kan se ovenover så fejler programmet før den går ind i selve constructoren.

Nogen der har nogle ideer til hvad der kan være galt her?

Jeg har kigget mine h filer igennem, og de er som de skal være.
Avatar billede segmose Nybegynder
19. november 2008 - 09:59 #1
Du bruger en instance af IPTVThread før den new'es.
Det sker f.ex. hvis en anden class construeres før main kaldes, f.ex. en global variable (class). Check hvad du har af globale variable.
Avatar billede evilfish Nybegynder
19. november 2008 - 10:06 #2
Det eneste jeg kan finde i mit program, som ikke er i en metode eller anden klasse, er selve oprettelsen af pointeren som news i starten af min main:

IPTVThread * mfunc_iptv;

Jeg går ud fra den er fin nok, siden det første der sker med den pointer er at den bliver oprettet via

int main(int argc, char** argv)
{
mfunc_iptv = new IPTVThread(); <-- klassen
Avatar billede evilfish Nybegynder
19. november 2008 - 10:14 #3
Segmose dit indlæg gjorde mig nysgerrig og jeg forsøgt at oprette og new's den lige efter hinanden i starten af min main:

IPTVThread * test = new IPTVThread();

Det gav også segmentation fault.
Avatar billede evilfish Nybegynder
19. november 2008 - 10:47 #4
Du har devist ret. Jeg fandt fejlen. Jeg havde en værdi som blev brugt før, men det var ikke IPTVThread. Det var en anden værdi som kom fra en hel fjern 3 sted. Tak for hjælpen, du fik mig i hvert fald til at se i den rigtige retning.
Avatar billede segmose Nybegynder
19. november 2008 - 11:37 #5
En global værdi eller en constructor i en funktion?
Avatar billede lars314 Nybegynder
20. november 2008 - 08:07 #6
Det lyder som om du har været rent ind i en variantion af

"static initialization order fiasco"

http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.12
Avatar billede natas-dk Nybegynder
24. februar 2009 - 21:17 #7
må man spørge hvad de er du skal lave med iptv :)
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