|
|||||||
|
|
|
![]() |
|
|
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: 02:59.




















