Repository 32bit  Forum
Repository 64bit  Wiki

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.

c++ & try catch & segmentation fault

Messaggioda tgmx » ven mag 15, 2009 8: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
tgmx
Linux 3.x
Linux 3.x
 
Messaggi: 1330
Iscritto il: ven apr 28, 2006 13:40
Località: Ancona
Slackware: 13.37
Desktop: KDE 4

Re: c++ & try catch & segmentation fault

Messaggioda d4z_c0nf » ven mag 15, 2009 8:58

Ma quella stampa che hai messo nel catch si verifica?
rock
Ultima modifica di d4z_c0nf il ven mag 15, 2009 9:04, modificato 2 volte in totale.
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1293
Iscritto il: mar mar 14, 2006 18:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce

Re: c++ & try catch & segmentation fault

Messaggioda tgmx » ven mag 15, 2009 9: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
tgmx
Linux 3.x
Linux 3.x
 
Messaggi: 1330
Iscritto il: ven apr 28, 2006 13:40
Località: Ancona
Slackware: 13.37
Desktop: KDE 4

Re: c++ & try catch & segmentation fault

Messaggioda d4z_c0nf » ven mag 15, 2009 9: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
d4z_c0nf
Packager
Packager
 
Messaggi: 1293
Iscritto il: mar mar 14, 2006 18:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce

Re: c++ & try catch & segmentation fault

Messaggioda tgmx » ven mag 15, 2009 9: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
tgmx
Linux 3.x
Linux 3.x
 
Messaggi: 1330
Iscritto il: ven apr 28, 2006 13:40
Località: Ancona
Slackware: 13.37
Desktop: KDE 4

Re: c++ & try catch & segmentation fault

Messaggioda d4z_c0nf » ven mag 15, 2009 9: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
d4z_c0nf
Packager
Packager
 
Messaggi: 1293
Iscritto il: mar mar 14, 2006 18:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce

Re: c++ & try catch & segmentation fault

Messaggioda tgmx » ven mag 15, 2009 9: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
tgmx
Linux 3.x
Linux 3.x
 
Messaggi: 1330
Iscritto il: ven apr 28, 2006 13:40
Località: Ancona
Slackware: 13.37
Desktop: KDE 4

Re: c++ & try catch & segmentation fault

Messaggioda d4z_c0nf » ven mag 15, 2009 9:25

Sì, così pare, scusa.
rock
Avatar utente
d4z_c0nf
Packager
Packager
 
Messaggi: 1293
Iscritto il: mar mar 14, 2006 18:07
Località: Salerno
Nome Cognome: Rocco Aliberti
Slackware: 14.1-64bit
Kernel: 3.10.17
Desktop: xfce

Re: c++ & try catch & segmentation fault

Messaggioda raffaele181188 » ven mag 15, 2009 12: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
raffaele181188
Packager
Packager
 
Messaggi: 789
Iscritto il: ven set 07, 2007 20:40
Località: DearSkin (FG)
Nome Cognome: Raffaele
Slackware: current
Kernel: 2.6.29.6
Desktop: KDE 4.3
Distribuzione: Ubuntu

Re: c++ & try catch & segmentation fault

Messaggioda shark1500 » ven mag 15, 2009 13: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
shark1500
Linux 2.6
Linux 2.6
 
Messaggi: 785
Iscritto il: gio apr 03, 2008 13:33
Località: Modna
Slackware: current
Kernel: 2.6.27.7-smp
Desktop: kde

Re: c++ & try catch & segmentation fault

Messaggioda tgmx » ven mag 15, 2009 14: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
tgmx
Linux 3.x
Linux 3.x
 
Messaggi: 1330
Iscritto il: ven apr 28, 2006 13:40
Località: Ancona
Slackware: 13.37
Desktop: KDE 4

Re: c++ & try catch & segmentation fault

Messaggioda raffaele181188 » ven mag 15, 2009 16: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
raffaele181188
Packager
Packager
 
Messaggi: 789
Iscritto il: ven set 07, 2007 20:40
Località: DearSkin (FG)
Nome Cognome: Raffaele
Slackware: current
Kernel: 2.6.29.6
Desktop: KDE 4.3
Distribuzione: Ubuntu

Re: c++ & try catch & segmentation fault

Messaggioda tgmx » ven mag 15, 2009 16: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!
Avatar utente
tgmx
Linux 3.x
Linux 3.x
 
Messaggi: 1330
Iscritto il: ven apr 28, 2006 13:40
Località: Ancona
Slackware: 13.37
Desktop: KDE 4


Torna a Programmazione

Chi c’è in linea

Visitano il forum: TurnitinBot [Bot] e 1 ospite

cron