Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Try Catch
Forum - C# / VB.NET - Try Catch

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
air (Normal User)
Newbie


Messaggi: 14
Iscritto: 23/04/2011

Segnala al moderatore
Postato alle 20:07
Sabato, 23/04/2011
Ciao a tutti ho questo problema... Il programma mi restituisce un errore di tipo
System.StackOverflowException

Vorrei cattuare questo errore con i catch, ma non ci riesco. Ho usato il seguente codice:
Codice sorgente - presumibilmente VB.NET

  1. Function Fdix(ByVal x As Single)
  2.         Dim sommatoria As Single
  3.         Dim cont As Integer
  4.         For cont = 0 To grado
  5.             sommatoria = sommatoria + (vet(cont, 0) * (x ^ (vet(cont, 1))))
  6.         Next
  7.         acu += 1
  8.         Try
  9.             Fdix = sommatoria
  10.         Catch ex As System.StackOverflowException
  11.             MsgBox(ex.Message)
  12.         End Try
  13.     End Function



Forse perchè lo uso dentro una funzione???

Ultima modifica effettuata da air il 23/04/2011 alle 20:08
PM Quote
Avatar
Riki94 (Normal User)
Pro


Messaggi: 93
Iscritto: 30/07/2009

Segnala al moderatore
Postato alle 20:18
Sabato, 23/04/2011
Il try catch funziona benissimo nelle funzioni.

Non so cosa faccia il programma e nello specifico la funzione, ma mi lascia un po perplesso..
tu dichiari una funzione fdix che ha come argomento un valore single... e fin qui ok.
Quindi esegui i tuoi calcoli vari.. e anche qui ok.

Infine, nel try catch, assegni a fdix che non hai dichiarato prima nella funzione il valore di sommatoria.
Ed è questo che mi lascia perplesso: se fdix non è una variabile che hai dichiarato prima significa che la intendi come funzione... Ma non puoi assegnare ad una funzione il valore di una variabile :)
se vuoi ritornare un valore devi scrivere:
Codice sorgente - presumibilmente C# / VB.NET

  1. Return variabile



che qui sarebbe:

Codice sorgente - presumibilmente C# / VB.NET

  1. Return sommatoria



Chiedo scusa se ho interpretato male...

PM Quote
Avatar
air (Normal User)
Newbie


Messaggi: 14
Iscritto: 23/04/2011

Segnala al moderatore
Postato alle 20:42
Sabato, 23/04/2011
No, puoi anche scrivere in quel modo! ha sempre funzionato, ho provato anche come dici infatti non cambia nulla. Nella variabile ex del mio catch specifico il tipo as che mi restituisce l'errore ma come se non lo prendesse..non capisco cos'è che non va!:(

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 22:46
Sabato, 23/04/2011
l'eccezione è generata dal ciclo for, che è fuori dal TRY, ecco perchè il catch non becca l'eccezione.
Metti anche il FOR dentro il blocco Try, e vedrai che ti prende tranquillamente l'eccezione generata.

PM Quote
Avatar
air (Normal User)
Newbie


Messaggi: 14
Iscritto: 23/04/2011

Segnala al moderatore
Postato alle 23:20
Sabato, 23/04/2011
Questa è l'eccezzione che mi da:

" An unhandled exception of type 'System.StackOverflowException' occurred in IlRisolutore.exe"

ho provato come dici, cioè a mettere il for dentro il try ma mi da l'errore che riportato sopra!

Codice sorgente - presumibilmente VB.NET

  1. Function Fdix(ByVal x As Single)
  2.         Dim sommatoria As Double
  3.         Dim cont As Integer
  4.         Try
  5.             For cont = 0 To grado
  6.                 sommatoria = sommatoria + (vet(cont, 0) * (x ^ (vet(cont, 1))))
  7.             Next
  8.             Fdix = sommatoria
  9.         Catch ex As StackOverflowException
  10.             MsgBox(ex.Message)
  11.         End Try
  12.     End Function


l'errore me lo da su "Fdix = sommatoria" xkèèè?

PM Quote
Avatar
Riki94 (Normal User)
Pro


Messaggi: 93
Iscritto: 30/07/2009

Segnala al moderatore
Postato alle 23:39
Sabato, 23/04/2011
te l'ho detto.... non puoi assegnare ad una funzione il valore della variabile... oltretutto la funzione non la passi neanche con gli argomenti...

PS: magari mi sbaglio io e sono fissato su quella cosa... ma mi sembra l'unica cosa possibile... :)

PM Quote
Avatar
air (Normal User)
Newbie


Messaggi: 14
Iscritto: 23/04/2011

Segnala al moderatore
Postato alle 23:49
Sabato, 23/04/2011
ho provato nuovamente come dici apportando le modifiche di entrambi ma non funziona!Faccio così anke xkè su uno dei miei libri di testo ritorna così le funzioni quindi non credo sia così:)..e cmq ho anke provato come dici ma nnt da fare! :(
Non riesco a risolvere! uff

PM Quote
Avatar
Phil93 (Normal User)
Pro


Messaggi: 85
Iscritto: 26/01/2011

Segnala al moderatore
Postato alle 0:23
Domenica, 24/04/2011
In VB.NET, come nelle altre versioni di Visual Basic, è possibile impostare il valore di ritorno di una funzione assegnando un valore al nome della stessa, dal momento che esso viene visto come variabile locale della stessa funzione. E' preferibile usare "Return" quando la funzione ha più punti d'uscita possibili, ma i due modi di operare sono identici.

PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 1:46
Domenica, 24/04/2011

Codice sorgente - presumibilmente VB.NET

  1. 1.
  2.       Function Fdix(ByVal x As Single) As Double
  3.    2.
  4.               Dim sommatoria As Double
  5.    3.
  6.               Dim cont As Integer
  7.    4.
  8.               Try
  9.    5.
  10.                   For cont = 0 To grado
  11.    6.
  12.                       sommatoria = sommatoria + (vet(cont, 0) * (x ^ (vet(cont, 1))))
  13.    7.
  14.                   Next
  15.    8.
  16.                   Fdix = sommatoria
  17.    9.
  18.               Catch ex As StackOverflowException
  19.   10.
  20.                   MsgBox(ex.Message)
  21.   11.
  22.               End Try
  23.  
  24.   12.        Return Fdix
  25.  
  26.           End Function



Prova così dovrebbe andare


If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo