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.
Rispondi
Avatar utente
tgmx
Linux 4.x
Linux 4.x
Messaggi: 1336
Iscritto il: ven 28 apr 2006, 14:40
Slackware: 14.1
Desktop: KDE 4
Località: Ancona

c++ & try catch & segmentation fault

Messaggio 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?

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: c++ & try catch & segmentation fault

Messaggio da d4z_c0nf »

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

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

Re: c++ & try catch & segmentation fault

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

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: c++ & try catch & segmentation fault

Messaggio 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

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

Re: c++ & try catch & segmentation fault

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

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: c++ & try catch & segmentation fault

Messaggio 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

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

Re: c++ & try catch & segmentation fault

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

Avatar utente
d4z_c0nf
Packager
Packager
Messaggi: 1296
Iscritto il: mar 14 mar 2006, 18:07
Nome Cognome: Rocco Aliberti
Slackware: 14.2-current64
Kernel: 4.14.73
Desktop: awesomeWM
Località: Pinerolo

Re: c++ & try catch & segmentation fault

Messaggio da d4z_c0nf »

Sì, così pare, scusa.
rock

Avatar utente
raffaele181188
Packager
Packager
Messaggi: 789
Iscritto il: ven 7 set 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

Messaggio da raffaele181188 »

http://www.velocityreviews.com/forums/t ... dling.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 3.x
Linux 3.x
Messaggi: 785
Iscritto il: gio 3 apr 2008, 14:33
Slackware: current
Kernel: 2.6.27.7-smp
Desktop: kde
Località: Modna

Re: c++ & try catch & segmentation fault

Messaggio 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

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

Re: c++ & try catch & segmentation fault

Messaggio 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?

Avatar utente
raffaele181188
Packager
Packager
Messaggi: 789
Iscritto il: ven 7 set 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

Messaggio 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

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

Re: c++ & try catch & segmentation fault

Messaggio 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!

Rispondi