Pagina 1 di 1

c++ & try catch & segmentation fault

Inviato: ven mag 15, 2009 9:30
da tgmx
Ciao Ragazzi,
non riesco a capire il funzionamento di try catch in c++ per catturare un segmentation fault ed evitare il crash del programma.

L'applicazione è in qt4 ma non credo sia importante, la parte di codice su cui sto facendo delle prove è:

Codice: Seleziona tutto

....
....
try
{
   QString *s;
   *s="ciao";
}
catch(...)
{
   std::cout << "errore" << std::endl;
}
....
....


ma il programma continua a crashare.
Dove sbaglio?

Re: c++ & try catch & segmentation fault

Inviato: ven mag 15, 2009 9:58
da d4z_c0nf
Ma quella stampa che hai messo nel catch si verifica?
rock

Re: c++ & try catch & segmentation fault

Inviato: ven mag 15, 2009 10:03
da tgmx
d4z_c0nf ha scritto:Ma quella stampa che hai messo nel catch si verifica?
rock


No, va in segmentation fault quando passa per

Codice: Seleziona tutto

*s="ciao";

Re: c++ & try catch & segmentation fault

Inviato: ven mag 15, 2009 10:04
da d4z_c0nf
tgmx ha scritto:
d4z_c0nf ha scritto:Ma quella stampa che hai messo nel catch si verifica?
rock


No, va in segmentation fault quando passa per

Codice: Seleziona tutto

*s="ciao";


Scusa, ma sei sicuro che si possa gestire il segfault?
rock

Re: c++ & try catch & segmentation fault

Inviato: ven mag 15, 2009 10:06
da tgmx
d4z_c0nf ha scritto:Scusa, ma sei sicuro che si possa gestire il segfault?
rock


No, infatti pare non funzioni, più che altro ci speravo dato che altrimenti è un bel problema...

Re: c++ & try catch & segmentation fault

Inviato: ven mag 15, 2009 10:09
da d4z_c0nf
tgmx ha scritto:
d4z_c0nf ha scritto:Scusa, ma sei sicuro che si possa gestire il segfault?
rock


No, infatti pare non funzioni, più che altro ci speravo dato che altrimenti è un bel problema...


Cercavo un po' in rete, e trovo opinioni contrastanti, chi dice non si possa gestire chi come questo utilizza i segnali (metodo *nix), ma utilizzando C.

http://forum.html.it/forum/showthread/t-636791.html

Poi dice che si dovrebbe poter fare con i blocchi try catch in c++.
Ma tu che tipo di eccezione hai specificato nel catch?
rock

Re: c++ & try catch & segmentation fault

Inviato: ven mag 15, 2009 10:20
da tgmx
d4z_c0nf ha scritto:
tgmx ha scritto:
d4z_c0nf ha scritto:Scusa, ma sei sicuro che si possa gestire il segfault?
rock


No, infatti pare non funzioni, più che altro ci speravo dato che altrimenti è un bel problema...


Cercavo un po' in rete, e trovo opinioni contrastanti, chi dice non si possa gestire chi come questo utilizza i segnali (metodo *nix), ma utilizzando C.

http://forum.html.it/forum/showthread/t-636791.html

Poi dice che si dovrebbe poter fare con i blocchi try catch in c++.
Ma tu che tipo di eccezione hai specificato nel catch?
rock


Per quel poco che ho capito sembra che " catch( ... ) " serva a catturare tutte le eccezioni.

Re: c++ & try catch & segmentation fault

Inviato: ven mag 15, 2009 10:25
da d4z_c0nf
Sì, così pare, scusa.
rock

Re: c++ & try catch & segmentation fault

Inviato: ven mag 15, 2009 13:21
da raffaele181188
http://www.velocityreviews.com/forums/t267889-re-segmentation-fault-exception-handling.html
Premetto che non conosco una mazza di C++
ma credo che un SegmentationFault non sia proprio una Eccezione, ecco perchè non viene catchata (infatti sembra che non entri proprio nel catch). Per lanciare una eccezione 'catchabile' serve un throw, ma un segfault non causa proprio nessun throwing perchè è un errore al di fuori del controllo del programma, non un'eccezione

Forse :D

Re: c++ & try catch & segmentation fault

Inviato: ven mag 15, 2009 14:36
da shark1500
Il segfolt e` un segnale del kernel che stronca il programma (se non sbaglio SIGSEGV). Come tutti i segnali si possono catturare in C, non so in C++ (penso proprio di si`), ma non con le eccezioni

Re: c++ & try catch & segmentation fault

Inviato: ven mag 15, 2009 15:34
da tgmx
Credo che sia come avete detto...

Al di la del fatto che non ho mai avuto a che fare con la gestione dei segnali in generale, secondo voi è possibile gestire il "segmentation fault" ed impedire che il programma vada in crash?

Re: c++ & try catch & segmentation fault

Inviato: ven mag 15, 2009 17:05
da raffaele181188
Nel link che ti ho postato prima c'era scritto che i segfault non vanno ignorati perchè da quel punto in avanti il programma non si sa come va a finire :D
In particolare si diceva che (come ha scritto anche shark) il segnale puoi catturarlo, ma a quel punto è meglio che "salvi il salvabile" (su disco intendo) e poi esci

Re: c++ & try catch & segmentation fault

Inviato: ven mag 15, 2009 17:14
da tgmx
raffaele181188 ha scritto:Nel link che ti ho postato prima c'era scritto che i segfault non vanno ignorati perchè da quel punto in avanti il programma non si sa come va a finire :D
In particolare si diceva che (come ha scritto anche shark) il segnale puoi catturarlo, ma a quel punto è meglio che "salvi il salvabile" (su disco intendo) e poi esci


... era come temevo...

Grazie a tutti!