Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C] - Allocazione e Riallocazione dinamica di Array di Struct

    Ragazzi sto uscendo pazzo!

    Come si fa l'allocazione dinamica di un'array di strutture?

    Ho la necessità di inserire un elemento alla volta!

    Se lo faccio per array di interi, funziona tutto. Con gli array di struct allocati dinamicamente, si blocca!

    HEEEEELPPPPP!

  2. #2
    Posta il codice che hai scritto finora.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Codice PHP:
    #include <stdio.h>
    #include <stddef.h>
    #include <stdlib.h>
    #include <string.h>
    /* !
     *  La struttura Telefono è utilizzata per memorizzare il Numero Telefonico 
     *  del Contatto ed il tipo ( "Etichetta" ) di numero 
     */
    typedef struct unsigned int  ID/*!< Variabile intera senza segno di 
                                        * indentificazione univoca del numero telefonico */
                                        
                     
    char  NumTel[50]; /*!< Stringa contenente il numero telefonico*/
                     
                     
    char  Etichetta [50]; /*!< Stringa contenente la tipologia di
                                            * numero telefonico: "Casa" , "Ufficio" , "Fax" , etc...*/
                   
    Telefono


    /* 
       La struttura Persona utilizzata per allocare un nuovo Contatto  
    */               
    typedef struct unsigned int  ID
                     
    char  Cognome [50]; 
                     
    char  Nome [50];
                     
    Telefono Tel;
                     
    char Indirizzo[100];
                   } 
    Persona
                   
    void InserisciPersona **New , int *n);
    void stampaPersona *List , int n );

    int main(){
       
    Persona *Contatti;
       
    int startchoice;
       
    start 0;
       
    Contatti NULL;

    printf("Premi 1 per inserire\n"
           "Premi 2 per terminare\n?"
    );
    scanf("%d", &choice);

    while(
    choice!=2){
       
    Inserisci(&Contatti, &start );
       
    stampa(Contattistart );
       
    printf("?");
       
    scanf("%d",&choice);
    }
       
    free(Contatti);
       
    system("PAUSE");
    return 
    0;
    }

    void InserisciPersona **New , int *)
    int idim;
      
    Persona *NewP;
      
      
    dim=*n;
      
      if (
    dim == 0){
        
    dim++;
        
    NewP=(Persona*)malloc(sizeof(Persona));
      }
      else{
        
    dim++;
        
    NewP = (Persona*)realloc(*New, dim);
      }

      
    system("CLS"); 
      
      
    /* Inserimento dati... */
      
    printf "\nInserimento Persona\n" );
      
      
    NewP[dim].ID=dim;  
      
    /* ...stampo l'ID */
      
    printf("\nID: %d\n" NewP[dim].ID); 
      
    /* Inserimento Cognome del Contatto nella struttura di appoggio */
      
    printf("Cognome: ");
      
    scanf("%s" NewP[dim].Cognome );
      
    /* Inserimento Nome del Contatto nella struttura di appoggio */
      
    printf("Nome: ");
      
    scanf "%s" NewP[dim].Nome );
      
    /* Inserimento Numero Telefonico del Contatto nella struttura di appoggio */
      
    printf("Numero: ");
      
    scanf("%s" NewP[dim].Tel.NumTel );
      
    /* Inserimento Tipo di Numero Telefonico del Contatto nella struttura di appoggio */
      
    printf("Tipo Numero: ");
      
    scanf("%s" NewP[dim].Tel.Etichetta );

      
    /* Inserimento Indirizzo del Contatto nella struttura di appoggio */
      
    getchar();
      
    printf("Indirizzo: ");
      
    fgetsNewP[dim].Indirizzo 100 stdin );
      
      
       
    /* Restutuisco al main i valori aggiornati */
       
    *dim;
       *New=
    NewP;

      
    /* Stampo un messaggio di di avviso e termino la procedura */ 
      
    system("CLS");
      
    printf "\nContatto inserito\n" ); 
      
    system("PAUSE");
      
    system("CLS"); 

       
       return;
       
    }

    void stampa Persona *List , int n )
    int i,   /* Variabile di iterazione per i cicli */
      
      
    system("CLS"); 
       
      
    printf("\n");
      
    printf("\t\t +-----------------------------+\n");
      
    printf("\t\t +       Stampa Contatti       + \n");
      
    printf("\t\t +-----------------------------+\n\n");
      
      
    printf(" -----------------------------------------------------------------------------------------\n");
      
    printf("   %-6s%-13s%-13s%-13s%-10s%s\n" "ID" "Cognome" "Nome" "Telefono" "Tipo" "Indirizzo" );
      
    printf(" -----------------------------------------------------------------------------------------\n\n");
     
      
    /* Se non c'è nessun contatto, ossia la lunghezza del file è "zero" */
      
    if ( == )
      {
         
    printf("     -> Nessun Contatto Presente <-\n");
      }
      
    /* Altrimenti stampa la lista di contatti */
      
    else
      {
        for(
    i=1i<=ni++)
        {
          
    printf("   %-6d%-13s%-13s%-13s%-9s%s\n" , List[i].ID , List[i].Cognome , List[i].Nome 
                                                    List[
    i].Tel.NumTel , List[i].Tel.Etichetta 
                                                    List[
    i].Indirizzo);
        }
     
      } 
      
    printf("\n -----------------------------------------------------------------------------------------\n\n");

      
    printf("\n\n");
      
      
    system("PAUSE");
      
    system("CLS");  
      return; 



  4. #4
    codice:
    NewP = (Persona*)realloc(*New, dim*sizeof(Persona));
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    fatto anche quello...
    è lo stesso! non funziona lo stesso!!!

  6. #6
    uuuuuuuuppp!

    Ragazzi vi prego aiutatemi! Tra poco mi impicco...

  7. #7
    Ragazzi era questo:
    Codice PHP:
    NewP = (Persona*)realloc(*New, (dim+1)*sizeof(Persona)); 
    non era dim, bensì dim+1....cioè aggiungi un altro elemento alla dimensione attuale dim!

  8. #8
    ... che tra l'altro non moltiplicavi nemmeno per la dimensione della struttura... :rollo:
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    colpa mia chiedo scusa, gliel'avevo modificato io quel codice...nella fretta ho dimenticato di moltiplicare la dimensione per i byte di Persona... certo è che non capisco perchè dim+1... già fai dim++ una riga sopra...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.