c++ & try catch & segmentation fault

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
tgmx
Linux 3.x
Linux 3.x
Messaggi: 1336
Iscritto il: ven apr 28, 2006 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

c++ & try catch & segmentation fault

Messaggioda tgmx » ven mag 15, 2009 9:30

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?

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar mar 14, 2006 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce
Località: Salerno

Re: c++ & try catch & segmentation fault

Messaggioda d4z_c0nf » ven mag 15, 2009 9:58

Ma quella stampa che hai messo nel catch si verifica?
rock
Ultima modifica di d4z_c0nf il ven mag 15, 2009 10:04, modificato 2 volte in totale.

Avatar utente
tgmx
Linux 3.x
Linux 3.x
Messaggi: 1336
Iscritto il: ven apr 28, 2006 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: c++ & try catch & segmentation fault

Messaggioda tgmx » ven mag 15, 2009 10:03

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";

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar mar 14, 2006 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce
Località: Salerno

Re: c++ & try catch & segmentation fault

Messaggioda d4z_c0nf » ven mag 15, 2009 10:04

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

Avatar utente
tgmx
Linux 3.x
Linux 3.x
Messaggi: 1336
Iscritto il: ven apr 28, 2006 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: c++ & try catch & segmentation fault

Messaggioda tgmx » ven mag 15, 2009 10:06

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...

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar mar 14, 2006 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce
Località: Salerno

Re: c++ & try catch & segmentation fault

Messaggioda d4z_c0nf » ven mag 15, 2009 10:09

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

Avatar utente
tgmx
Linux 3.x
Linux 3.x
Messaggi: 1336
Iscritto il: ven apr 28, 2006 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: c++ & try catch & segmentation fault

Messaggioda tgmx » ven mag 15, 2009 10:20

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.

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar mar 14, 2006 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce
Località: Salerno

Re: c++ & try catch & segmentation fault

Messaggioda d4z_c0nf » ven mag 15, 2009 10:25

Sì, così pare, scusa.
rock

Avatar utente
raffaele181188
Packager
Packager
Messaggi: 789
Iscritto il: ven set 07, 2007 21:40
Nome Cognome: Raffaele
Slackware: current
Kernel: 2.6.29.6
Desktop: KDE 4.3
Distribuzione: Ubuntu
Località: DearSkin (FG)

Re: c++ & try catch & segmentation fault

Messaggioda raffaele181188 » ven mag 15, 2009 13:21

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

Avatar utente
shark1500
Linux 2.6
Linux 2.6
Messaggi: 785
Iscritto il: gio apr 03, 2008 14:33
Slackware: current
Kernel: 2.6.27.7-smp
Desktop: kde
Località: Modna

Re: c++ & try catch & segmentation fault

Messaggioda shark1500 » ven mag 15, 2009 14:36

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

Avatar utente
tgmx
Linux 3.x
Linux 3.x
Messaggi: 1336
Iscritto il: ven apr 28, 2006 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: c++ & try catch & segmentation fault

Messaggioda tgmx » ven mag 15, 2009 15:34

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?

Avatar utente
raffaele181188
Packager
Packager
Messaggi: 789
Iscritto il: ven set 07, 2007 21:40
Nome Cognome: Raffaele
Slackware: current
Kernel: 2.6.29.6
Desktop: KDE 4.3
Distribuzione: Ubuntu
Località: DearSkin (FG)

Re: c++ & try catch & segmentation fault

Messaggioda raffaele181188 » ven mag 15, 2009 17:05

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

Avatar utente
tgmx
Linux 3.x
Linux 3.x
Messaggi: 1336
Iscritto il: ven apr 28, 2006 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

Re: c++ & try catch & segmentation fault

Messaggioda tgmx » ven mag 15, 2009 17:14

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!


Torna a “Programmazione”

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite