|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
[C]Eccezione non gestita... almeno credo
Ciao a tutti, sto facendo degli esercizi in C presi da un sito, e uno diceva che dato un numero in input devo trovare il più vicino numero palindromo.
Io ho usato un ciclo while che controlla se la stringa contenente l'input è uguale alla stessa stringa inversa, che viene 'calcolata' dalla funzione reverse. Ora quando compilo (uso Visual C++), mi dà questi errori: Codice:
Eccezione first-chance a 0x1026f671 in The next palindrome.exe: 0xC0000005: Violazione di accesso nella lettura del percorso 0x00000331. Eccezione non gestita a 0x1026f671 in The next palindrome.exe: 0xC0000005: Violazione di accesso nella lettura del percorso 0x00000331. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2006
Messaggi: 22462
|
in c le eccezzioni non possono essere gestite perchè sono una caratteristica propria del c++, comunque cìè qualcosa che non va nel codice che hai scritto
__________________
amd a64x2 4400+ sk939;asus a8n-sli; 2x1gb ddr400; x850 crossfire; 2 x western digital abys 320gb|| asus g1
Se striscia fulmina, se svolazza l'ammazza |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
Ok, grazie, ora controllo, se continua a non andare vi posto il codice
|
![]() |
![]() |
![]() |
#4 |
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Puoi dare un'occhiata al Contest 10
![]() |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
Ho dato giusto un'occhiata veloce al codice che c'è nella prima pagina, quello scritto in C, ma è esageratamente più lungo del mio (sarà che sono io ad aver fatto maree di errori).
Questo è quell che ho scritto: Codice:
#include <stdio.h> #include <string.h> char* reverse(char *s) { int i, j; char *t; strcpy(t,s); for(i = 0 , j = strlen(s) - 1 ; j >= 0 ; i++, j--) *(s + i) = *(t + j); return s; } int palindrome(char *n){ int num = (int)n; while(n != reverse(n)){ num++; n = (char*)num; } return num; } int main(int argc, char *argv[]) { int input; printf("Inserisci un numero: "); scanf("%d", &input); char *in = (char*)input; int pal = palindrome(in); printf("%d è un numero palindromo", pal); return 0; } |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
prima che arrivi l'obiezione: __try/__except é un'estensione Microsoft al C e non é presente su tutti i compilatori; ad esempio manca al MinGW, uno dei motivi percui il MinGW non é molto consigliato per programmare su Windows. il team di ReactOS, che é costretto ad usare il MinGW, ha dovuto scrivere da zero una mini-libreria per la gestione manuale delle eccezioni SEH. |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Mar 2008
Messaggi: 401
|
Grazie per la spiegazione, ma quali istruzioni dovrei mettere nel blocco try/except?
Te lo chiedo perché non conoscevo quest'istruzione. |
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: Oct 2006
Città: Roma
Messaggi: 1383
|
Quote:
in un blocco __try/__except devi mettere l'istruzione che potrebbe potenzialmente causare l'eccezione SEH, ma nel tuo caso mi sembra che piu che catturare l'eccezione devi semplicemente correggere un bug ![]() intanto se ti interessa qui c'é la guida su __try/__except: http://msdn.microsoft.com/en-us/libr...57(VS.85).aspx http://msdn.microsoft.com/en-us/library/zazxh1a9.aspx http://msdn.microsoft.com/en-us/library/s58ftw19.aspx PS: quando usi lo Structured Exception Handling (SEH) evita di usare anche le eccezioni C++: alcuni compilatori implementano queste ultime sulla base delle prime, e quindi i due meccanismi interferiscono; ad esempio potresti ritrovarti a catturare un'eccezione SEH in un blocco catch collocato in uno stack frame che viene prima del blocco __except che avrebbe invece dovuto catturare l'eccezione. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:34.