ciao, ho avuto un problema con un programma che gestisce le matrici totalmente dinamiche, ovvero matrici che vengono allocate dinamicamente sia il numero delle righe sia la lunghezza di ciascuna stringa.
Il programma richiedeva:
1. la lettura da file con questo formato utilizando una matrice dinamica:
codice:
topolino
pluto
minnie
dove su ogni riga c'è solo una parola che non può superare i 100 caratteri, e non è nota la lunghezza del file;
2. stampa della matrice su video;
3. ordinameto alfabetico della matrice;
4. stampa a video della matrice ordinata alfabeticamente;
io ho fatto solo la lettura e mi da un errore nella allocazione delle singole parole suppongo
nella funzione read_mat:
codice:
m[i] = (char*)alloco_parola ( &dim_parola );
posto qua il codice così potete dare un occhiata, soprattuto per quanto riguarda i passaggi di parametri delle funzioni e le varie allocazioni, che non so se sono proprio corretti...
Grazie
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int dim_valutation ( void );
char** alloco_row ( int*  );
char** read_mat ( int* );
int parola_valutation ( char* );
char* alloco_parola ( int* );

int main ()
{
    char** mat;
    int i, j;
    int dim;
    
    dim = valutation_dim ( );
    
    mat = (char**)alloco_row ( &dim ); 
    
    mat = read_mat ( &dim );
    
    for ( i=0; i<dim; i++ ) {
        printf ("%s\n", mat[i]);
    }
    
    system ("pause");
    return (1);    
}
int valutation_dim ( void )
{
    int i;
    char str[100];
    FILE *aptr;
    
    aptr = fopen("testo.txt","r");
    i=0;
    while ( fscanf (aptr,"%s", str) != EOF ) {
          i++;
    }
    fclose(aptr);
    
    if ( i<=0 ) {
         printf ("Errore file!\n");
         exit(1);
    }
    return(i);
}
char** alloco_row ( int* dim )
{
      char** m;
      
      m = (char**)malloc((*dim)*sizeof(char*));
      
      if ( m == NULL ) {
           printf ("Errore allocazione matrice!\n");
           exit(1);
      }
      return (m);
}
char** read_mat ( int* dim ) 
{
      char **m;
      int i, dim_parola;
      char str[100];
      FILE *aptr;
      
      aptr=fopen("testo.txt","r");
      if ( aptr == NULL ) {
           printf ("Errore apertura file!\n");
           exit(1);
      }
      i=0;
      while ( fscanf (aptr,"%s", str ) != EOF && i<(*dim) ) {
            
            dim_parola = parola_valutation( str );
            
            m[i] = (char*)alloco_parola ( &dim_parola );
            
            strcpy ( m[i], str );
      i++;      
      }
      return (m);
}
int parola_valutation ( char* str )
{
    int dim_parola;
    
    dim_parola = strlen(str)+1;
    
    if ( dim_parola <= 0 ) {
         printf ("Errore valutazione parole!\n");
         exit(1);
    }
    return(dim_parola);
}
char* alloco_parola ( int* dimParola ) 
{
      char *parola;
      
      parola = (char*)malloc((*dimParola)*sizeof(char));
      
      if ( parola == NULL ) {
           printf ("Errore allocazione parole!\n");
           exit(1);
      }
      return (parola);
}