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/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. }


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

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:

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
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: 6380
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 ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
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.


Il mio blog: https://piero.dev
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
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: 177
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:

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

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

PM Quote