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++ - errore riferimento memoria
Forum - C/C++ - errore riferimento memoria

Avatar
totipianurese (Member)
Pro


Messaggi: 168
Iscritto: 24/06/2008

Segnala al moderatore
Postato alle 18:45
Venerdì, 10/10/2008
Ciao raga sapete dirmi perche quando compilo questo programma e dopodiche lo volgio chiudere, mi segnala un errore dicendomi ke l'istruzione ha fatto riferimento alla memoria.
Codice sorgente - presumibilmente C#

  1. #include <iostream>
  2. #include <string.h>
  3. int z,N,I,num,conta,k;
  4. int vet[8],numeri[8];
  5. void Unita(void);
  6. void Decine(void);
  7. using namespace std;
  8. string car[9];
  9. string car1[9];
  10. string AA[9];
  11. string meta[8];
  12.  
  13. int main()
  14. {
  15.    car[0]="uno";
  16.    car[1]="due";
  17.    car[2]="tre";
  18.    car[3]="quattro";
  19.    car[4]="cinque";
  20.    car[5]="sei";
  21.    car[6]="sette";
  22.    car[7]="otto";
  23.    car[8]="nove";
  24.    car1[0]="undici";
  25.    car1[1]="dodici";
  26.    car1[2]="tredici";
  27.    car1[3]="quattordici";
  28.    car1[4]="quindici";
  29.    car1[5]="sedici";
  30.    car1[6]="diciasette";
  31.    car1[7]="diciotto";
  32.    car1[8]="diciannove";
  33.    numeri[0]=1;
  34.    numeri[1]=2;
  35.    numeri[2]=3;
  36.    numeri[3]=4;
  37.    numeri[4]=5;
  38.    numeri[5]=6;
  39.    numeri[6]=7;
  40.    numeri[7]=8;
  41.    numeri[8]=9;
  42.    meta[0]="vent";
  43.    meta[1]="trent";
  44.    meta[2]="quarant";
  45.    meta[3]="cinquant";
  46.    meta[4]="sessant";
  47.    meta[5]="settant";
  48.    meta[6]="ottant";
  49.    meta[7]="novant";
  50.    AA[0]="dieci";
  51.    AA[1]="venti";
  52.    AA[2]="trenta";
  53.    AA[3]="quaranta";
  54.    AA[4]="cinquanta";
  55.    AA[5]="sessanta";
  56.    AA[6]="settanta";
  57.    AA[7]="ottanta";
  58.    AA[8]="novanta";
  59.    cout<<"Inserisci il numero di numeri da inserire = ";
  60.    cin>>num;
  61.    for (I=0;I<num;I++)
  62.                         {
  63.                         cout<<"Inserisci "<<I+1<<" numero = ";
  64.                         cin>>vet[I];
  65.                         conta++;
  66.                         }                        
  67.    if (conta==1)
  68.                {
  69.                 I=0;                                              
  70.                 Unita();
  71.                }
  72.    if (conta==2)
  73.                {
  74.                I=0;
  75.                Decine();        
  76.                }
  77.    getchar();
  78.    getchar();
  79.    
  80. }
  81.  void Unita(void)
  82.  {
  83.    switch (vet[I])
  84.                   {
  85.                    case 1:    
  86.                    cout<<car[0];
  87.                    break;
  88.                    case 2:    
  89.                    cout<<car[1];
  90.                    break;
  91.                    case 3:    
  92.                    cout<<car[2];
  93.                    break;
  94.                    case 4:    
  95.                    cout<<car[3];
  96.                    break;
  97.                    case 5:    
  98.                    cout<<car[4];
  99.                    break;
  100.                    case 6:    
  101.                    cout<<car[5];
  102.                    break;
  103.                    case 7:    
  104.                    cout<<car[6];
  105.                    break;
  106.                    case 8:    
  107.                    cout<<car[7];
  108.                    break;
  109.                    case 9:    
  110.                    cout<<car[8];
  111.                    break;
  112.                   }
  113.  }                
  114.   void Decine(void)
  115.   {
  116.    if (vet[I]==1)
  117.                 {
  118.                  switch (vet[I+1])
  119.                                      {
  120.                                       case 1:
  121.                                       cout<<car1[0];
  122.                                       break;
  123.                                       case 2:
  124.                                       cout<<car1[1];
  125.                                       break;
  126.                                       case 3:
  127.                                       cout<<car1[2];
  128.                                       break;
  129.                                       case 4:
  130.                                       cout<<car1[3];
  131.                                       break;
  132.                                       case 5:
  133.                                       cout<<car1[4];
  134.                                       break;
  135.                                       case 6:
  136.                                       cout<<car1[5];
  137.                                       break;
  138.                                       case 7:
  139.                                       cout<<car1[6];
  140.                                       break;
  141.                                       case 8:
  142.                                       cout<<car1[7];
  143.                                       break;
  144.                                       case 9:
  145.                                       cout<<car1[8];
  146.                                       break;                                
  147.                                      }                            
  148.                 }
  149.                 else
  150.                  {                  
  151.                   do
  152.                    {            
  153.                    if (vet[I]==numeri[I+1])
  154.                                            {
  155.                                             if (vet[I+1]==1||8)
  156.                                                                {
  157.                                                                 cout<<meta[I+1];
  158.                                                                 I=1;
  159.                                                                 Unita();
  160.                                                                 I=10;          
  161.                                                                }
  162.                                                                else
  163.                                                                {
  164.                                                                 cout<<AA[I+1];
  165.                                                                 I=1;
  166.                                                                 Unita();
  167.                                                                 I=10;    
  168.                                                                }                  
  169.                                            }
  170.                                           else
  171.                                            I++;
  172.                    }                        
  173.                   while(I=10);                        
  174.                                          
  175.                  }
  176.   }


PM Quote
Avatar
gioser (Normal User)
Pro


Messaggi: 111
Iscritto: 03/10/2008

Segnala al moderatore
Postato alle 19:23
Venerdì, 10/10/2008
devi dichiarare numeri[] come un array di 9 elementi e non di 8.

Inoltre sarebbe igienico inizializzare conta ;)


PM Quote
Avatar
totipianurese (Member)
Pro


Messaggi: 168
Iscritto: 24/06/2008

Segnala al moderatore
Postato alle 19:32
Venerdì, 10/10/2008
si ho risolto, pero adesso non so perche il programma funziona a convertire solo numeri fino a 29, inserendo da 30 in poi non mi stampa niente.

Codice sorgente - presumibilmente C#

  1. #include <iostream>
  2. #include <string.h>
  3. int z,N,I,num,conta,k;
  4. int vet[8],numeri[8];
  5. void Unita(void);
  6. void Decine(void);
  7. using namespace std;
  8. string car[9];
  9. string car1[9];
  10. string primi[8];
  11. string meta[8];
  12.  
  13. int main()
  14. {
  15.    conta=0;  
  16.    car[0]="uno";
  17.    car[1]="due";
  18.    car[2]="tre";
  19.    car[3]="quattro";
  20.    car[4]="cinque";
  21.    car[5]="sei";
  22.    car[6]="sette";
  23.    car[7]="otto";
  24.    car[8]="nove";
  25.    car1[0]="undici";
  26.    car1[1]="dodici";
  27.    car1[2]="tredici";
  28.    car1[3]="quattordici";
  29.    car1[4]="quindici";
  30.    car1[5]="sedici";
  31.    car1[6]="diciasette";
  32.    car1[7]="diciotto";
  33.    car1[8]="diciannove";
  34.    numeri[0]=2;
  35.    numeri[1]=3;
  36.    numeri[2]=4;
  37.    numeri[3]=5;
  38.    numeri[4]=6;
  39.    numeri[5]=7;
  40.    numeri[6]=8;
  41.    numeri[7]=9;
  42.    meta[0]="vent";
  43.    meta[1]="trent";
  44.    meta[2]="quarant";
  45.    meta[3]="cinquant";
  46.    meta[4]="sessant";
  47.    meta[5]="settant";
  48.    meta[6]="ottant";
  49.    meta[7]="novant";
  50.    primi[0]="venti";
  51.    primi[1]="trenta";
  52.    primi[2]="quaranta";
  53.    primi[3]="cinquanta";
  54.    primi[4]="sessanta";
  55.    primi[5]="settanta";
  56.    primi[6]="ottanta";
  57.    primi[7]="novanta";
  58.    cout<<"Inserisci il numero di numeri da inserire = ";
  59.    cin>>num;
  60.    for (I=0;I<num;I++)
  61.                         {
  62.                         cout<<"Inserisci "<<I+1<<" numero = ";
  63.                         cin>>vet[I];
  64.                         conta++;
  65.                         }                        
  66.    if (conta==1)
  67.                {
  68.                 I=0;                                              
  69.                 Unita();
  70.                }
  71.    if (conta==2)
  72.                {
  73.                I=0;
  74.                Decine();        
  75.                }
  76.    getchar();
  77.    getchar();
  78.    
  79. }
  80.  
  81.  void Unita(void)
  82.  {
  83.    switch (vet[I])
  84.                   {
  85.                    case 1:    
  86.                    cout<<car[0];
  87.                    break;
  88.                    case 2:    
  89.                    cout<<car[1];
  90.                    break;
  91.                    case 3:    
  92.                    cout<<car[2];
  93.                    break;
  94.                    case 4:    
  95.                    cout<<car[3];
  96.                    break;
  97.                    case 5:    
  98.                    cout<<car[4];
  99.                    break;
  100.                    case 6:    
  101.                    cout<<car[5];
  102.                    break;
  103.                    case 7:    
  104.                    cout<<car[6];
  105.                    break;
  106.                    case 8:    
  107.                    cout<<car[7];
  108.                    break;
  109.                    case 9:    
  110.                    cout<<car[8];
  111.                    break;
  112.                   }
  113.  }                
  114.   void Decine(void)
  115.   {
  116.    k=0;    
  117.    if (vet[I]==1)
  118.                 {
  119.                  if (vet[I+1]==0)
  120.                                 {
  121.                                 cout<<"dieci";
  122.                                 }
  123.                  else
  124.                  {                        
  125.                  switch (vet[I+1])
  126.                                      {
  127.                                       case 1:
  128.                                       cout<<car1[0];
  129.                                       break;
  130.                                       case 2:
  131.                                       cout<<car1[1];
  132.                                       break;
  133.                                       case 3:
  134.                                       cout<<car1[2];
  135.                                       break;
  136.                                       case 4:
  137.                                       cout<<car1[3];
  138.                                       break;
  139.                                       case 5:
  140.                                       cout<<car1[4];
  141.                                       break;
  142.                                       case 6:
  143.                                       cout<<car1[5];
  144.                                       break;
  145.                                       case 7:
  146.                                       cout<<car1[6];
  147.                                       break;
  148.                                       case 8:
  149.                                       cout<<car1[7];
  150.                                       break;
  151.                                       case 9:
  152.                                       cout<<car1[8];
  153.                                       break;                                
  154.                                      }  
  155.                  }                                              
  156.                 }
  157.                 else
  158.                  {                  
  159.                   do
  160.                    {            
  161.                    if (vet[I]==numeri[k])
  162.                                          {
  163.                                           if ((vet[I+1]==1)||(vet[I+1]==8))
  164.                                                              {
  165.                                                               cout<<meta[k];
  166.                                                               I=1;
  167.                                                               Unita();
  168.                                                               k=10;          
  169.                                                              }
  170.                                                              else
  171.                                                              {
  172.                                                               cout<<primi[k];
  173.                                                               I=1;
  174.                                                               Unita();
  175.                                                               k=10;    
  176.                                                              }                  
  177.                                          }
  178.                                          else
  179.                                          k++;
  180.                    }                        
  181.                   while(k==10);                        
  182.                  }
  183.   }


PM Quote
Avatar
gioser (Normal User)
Pro


Messaggi: 111
Iscritto: 03/10/2008

Segnala al moderatore
Postato alle 8:59
Lunedì, 13/10/2008
Testo quotato

Postato originariamente da totipianurese:

si ho risolto, pero adesso non so perche il programma funziona a convertire solo numeri fino a 29, inserendo da 30 in poi non mi stampa niente.




questo non è più un problema di sintassi del C++ ma di logica dell'algoritmo che hai implementato ;)

PM Quote
Avatar
munkaka (Member)
Pro


Messaggi: 119
Iscritto: 07/09/2008

Segnala al moderatore
Postato alle 12:31
Martedì, 14/10/2008
ho trovato il problema
nel ciclo do-while della funzione decine hai messo come condizione k==10
il programma esegue il ciclo la prima volta, quindi funziona per i numeri fino a venti che sono quelli controllati nella prima iterazione, poi esce perchè k!=10
invece di k==10 devi mettere k!=10 o k<10 e poi funziona

Ultima modifica effettuata da munkaka il 14/10/2008 alle 12:32
PM Quote