Newsgroup: it.comp.lang.c
Titolo: Array non dimensionati

Ciao a tutti, sto usando degli array a due dimensioni dichiarati con prima
dimensione ignota. In fase di compilazione tutto ok, ma in esecuzione, alla
FINE del programma, si pianta e dà in output "abnormal program termination".
Un'altra routine che uso addirittura manda in crash l'IDE e Windows mi
segnala un "tentativo di eseguire un'istruzione non valida". Faccio presente
che eseguendo i programmi con il Trace va tutto bene, cioè le variabili di
output, prima del passo di uscita, contengono tutti i valori attesi.
Qualcuno mi sa spiegare che succede?
-- 
Posted from 
mta01-acc.tin.it
 [212.216.176.32] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

Qualcuno mi sa spiegare che succede?
Solo se scrivi qualche linea di codice.
Non pretenderai di farti visitare dal dottore per telefono ? ;)
--
Andrea Laforgia (ICQ 87230455)
"A C program's trick is sometimes a C++ program's trap"
                                          [S.B.Lippman]

Ok, ecco il codice di uno dei programmi. Prima però provo a spiegare cosa
fa. Si tratta di prendere l'array trie già definito e con una serie
di controlli copiargli in fondo quello che viene messo in trie_2 cioè le
quattro righe
20  0  0  2  0
21  0  0  3  0
22  0  0  5  0
23  0  0  5  0
In trie_2 queste sono indiciate ovviamente da 0 a 3. In trie dovranno avere
indice da 20 a 23.
Inoltre quattro righe di trie vanno modificate come segue:
 3    5   20  1  0
 8   21  11  2  1
13  22  14  4  4
18  19  23  4  4
Se si fissa un breakpoint subito prima delle istruzioni di stampa a video si
può vedere che il vettore trie è effettivamente diventato quello voluto. Il
problema è che non lo si può usare, infatti già le istruzioni di stampa non
hanno effetto.
Ringrazio tutti quelli che mi vorranno aiutare.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int k = 5;
int nummaxstato = 19;
int trie[][5] =
 { 0, 1, 3, 0, 0,
    1, 8, 2, 1, 0,
    2, 4, 0, 2, 3,
    3, 5, 0, 1, 0,
    4, 6,15, 3, 5,
    5, 7,16, 2, 1,
    6, 0, 9, 4, 7,
    7, 0,10, 3, 8,
    8, 0,11, 2, 1,
    9, 0, 0, 5,10,
   10,12, 0, 4,11,
   11,13, 0, 3, 2,
   12, 0, 0, 5,13,
   13, 0, 14,4, 4,
   14, 0, 0, 5,15,
   15,17, 0, 4,16,
   16,18, 0, 3, 2,
   17, 0, 0, 5,18,
   18,19, 0, 4, 4,
   19, 0, 0, 5, 6 };
int trie_2[][5] = {0,0,0,0,0};
void main(void)
{
  int p, a, j;
   int q, numstato;
  numstato = nummaxstato;
  for (p=1; p<=nummaxstato; p++)
     if (trie[p][3]<k)
        for (a=0; a<=1; a++)
            if ((!trie[p][a+1])||(trie[p][a+1]>nummaxstato))
                if
((trie[trie[p][4]][a+1])&&(trie[trie[p][4]][a+1]<=nummaxstato))
                {
                  q = numstato-nummaxstato;
                  numstato++;
                  trie_2[q][0] = numstato;
                  trie_2[q][1] = trie_2[q][2] = trie_2[q][4] = 0;
                  trie_2[q][3] = trie[p][3];
                  trie_2[q][3]++;
                  trie[p][a+1] = numstato;
                 ++a;  // per uscire dal for a
                 }
  for (p=(nummaxstato+1); p<=numstato; p++)   // aggiunge trie_2 in coda a
trie
    for (j=0; j<=4; j++)
       trie[p][j] = trie_2[p-(nummaxstato+1)][j];
 nummaxstato = numstato;
 { // stampa tabella modificata
  int i,j;
  int *p;
  printf("  Sta  Fsx  Fdx  Lev  Fun\n");
  for (i=0; i<=nummaxstato; ++i) {
      printf(" ");
      p = &trie[i][0];
      for (j=0; j<=4; ++j) printf("%5d", *(p+j));
      printf("\n");
  }
 }
}  // main
-- 
Posted from 
mta23-acc.tin.it
 [212.216.176.76] 
