Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Perchè crasha?
Forum - C/C++ - Perchè crasha?

Avatar
mariognai (Member)
Newbie


Messaggi: 10
Iscritto: 11/04/2016

Segnala al moderatore
Postato alle 18:57
Martedì, 19/04/2016
Ciao ragazzi, sto sviluppando un programmino che gestisce l'archivio di una biblioteca.
Compilandolo, non mi sta dando nessun errore..ma quando vado ad eseguirlo mi crasha all'improvviso.
Sapete aiutarmi? Forse per ualche svista non riesco a trovare da solo il problema.. :rofl:

Codice sorgente - presumibilmente C++

  1. #include<stdlib.h>
  2. #include<stdio.h>
  3. #define MAXCHAR 100
  4. #define MAXL 10000
  5.  
  6. int main(){
  7.         typedef struct{
  8.                 int isbn;
  9.                 char autore[MAXCHAR];
  10.                 char titolo[MAXCHAR];
  11.                 bool prestato;
  12.                
  13.         }libro;
  14.        
  15.         libro biblioteca[MAXL];
  16.         libro l;
  17.         int scelta, nl, i;
  18.         char p;
  19.        
  20.         do{
  21.                 printf("1. Registra libro.\n");
  22.                 printf("2. Riepilogo biblioteca.\n");
  23.                 printf("0. Fine.\n");
  24.                
  25.                 printf("Scelta: ");
  26.                 scanf("%d", &scelta);
  27.                
  28.                 fflush(stdin);
  29.                 system("cls");
  30.                
  31.                 switch(scelta){
  32.                         case 1: printf("Quanti libri vuoi registrare? ");
  33.                                         scanf("%d", &nl);
  34.                                        
  35.                                         for(i=0; i<nl; i++){
  36.                                                 printf("LIBRO N.%d\n\n", i+1);
  37.                                                 fflush(stdin);
  38.                                                 printf("Digita il Codice ISBN: ");
  39.                                                 scanf("%d", &biblioteca[i].isbn);
  40.                                                 fflush(stdin);
  41.                                                 printf("Digita l'autore: ");
  42.                                                 gets(biblioteca[i].autore);
  43.                                                 fflush(stdin);
  44.                                                 printf("Digita il titolo: ");
  45.                                                 gets(biblioteca[i].titolo);
  46.                                                 fflush(stdin);
  47.                                                 printf("Il seguente libro e' prestato? (s/n): ");
  48.                                                 scanf("%c", &p);
  49.                                                 fflush(stdin);
  50.                                                
  51.                                                 system("cls");
  52.                                         }
  53.                                        
  54.                                         system("pause");
  55.                                         system("cls");
  56.                                         break;
  57.                 }
  58.         }while(scelta!=0);
  59.        
  60.        
  61.        
  62.         system("pause");
  63.         return 0;
  64. }



"Possiamo vedere solo poco davanti a noi, ma possiamo vedere tante cose che bisogna fare."
[Alan Turing]
PM Quote
Avatar
Mattia99 (Member)
Rookie


Messaggi: 38
Iscritto: 19/02/2016

Segnala al moderatore
Postato alle 19:08
Martedì, 19/04/2016
Prova a diminuire il valore di MAXL portandolo a 1000


«Mi farebbe piacere cambiare il mondo, ma non mi danno il suo codice sorgente.»
PM Quote
Avatar
mariognai (Member)
Newbie


Messaggi: 10
Iscritto: 11/04/2016

Segnala al moderatore
Postato alle 19:09
Martedì, 19/04/2016
Grazie mille, funziona.. era partito uno 0 in più :k:


"Possiamo vedere solo poco davanti a noi, ma possiamo vedere tante cose che bisogna fare."
[Alan Turing]
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1452
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 19:21
Martedì, 19/04/2016
Ma stiamo scherzando? Un topic dal titolo "perché crasha?" dove si chiede di trovare una ipotetica svista senza alcun indizio ne info di debug?

Questo se non viola il regolamento è quantomeno un comportamento infantile.

La prossima volta usi un debugger e come minimo dici in che punto si verifica l'errore.

Non è giusto che qualcuno faccia questo al posto tua per tua negligenza. Questo a prescindere dalla complessità del programma.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5473
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:37
Martedì, 19/04/2016
Occhio che il vettore

libro biblioteca[MAXL];

viene allocato nello stack. Lo spazio per quest'ultimo è limitato e tentare di allocare troppo spazio causa un crash.

Alloca lo spazio dinamicamente (se hai bisogno di tanti elementi), con la malloc.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6108
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 6:44
Mercoledì, 20/04/2016
Testo quotato

Postato originariamente da TheDarkJuster:
Questo se non viola il regolamento è quantomeno un comportamento infantile.

La prossima volta usi un debugger e come minimo dici in che punto si verifica l'errore.

Non è giusto che qualcuno faccia questo al posto tua per tua negligenza. Questo a prescindere dalla complessità del programma.  



Forse il nostro utente non ha ancora familiarità con i debugger, no? E poi sono ~50 righe di codice... per questa volta lasciamo andare.

Oltre a questo, cerchiamo tutti di tenere un comportamento e un linguaggio rispettoso.


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1452
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 8:28
Mercoledì, 20/04/2016
Ho visto che non affatto difficile però è abbastanza riprovevole ugualmente.
Mi scuso per essere stato troppo duro.
Scriverò un breve artico su come fare il debug perché questo non accada mai più.

PM Quote
Avatar
Template (Member)
Pro


Messaggi: 175
Iscritto: 09/12/2015

Segnala al moderatore
Postato alle 8:36
Mercoledì, 20/04/2016
Testo quotato

Postato originariamente da TheDarkJuster:
Scriverò un breve artico su come fare il debug perché questo non accada mai più.  



Buona idea: si tratta di un argomento che molti (soprattutto neofiti ed autodidatti) spesso sottovalutano :k:


"Nel curriculum scrivete quello che sapete fare... e anche quello che non sapete fare! Tipo: "Già vescovo di Cracovia, partecipai alla Coppa America, vincendola!""
[...]
"Sto giocando al piccolo Dio e mi sta venendo pure alla grande."
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1452
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 17:01
Mercoledì, 20/04/2016

PM Quote