Grandezza di un vettore di Strutture

di il
21 risposte

21 Risposte - Pagina 2

  • Re: Grandezza di un vettore di Strutture

    Come detto prima da Oregon, se devi solo stampare/elaborare i dati uno alla volta come entità a se stanti ti basta dichiarare una sola struct e leggere/modificare/scrivere ogni volta in quella.

    Se devi mantenerle in memoria/usarle contemporaneamente allora devi usare l'allocazione dinamica.
    Qui ci sono diverse strade: puoi riallocare l'array a ogni lettura != 0, puoi riallocare l'array ogni tot elementi e poi alla fine riallocare per il numero esatto di elementi, puoi leggere i dati in una lista e alla fine trasferirli in un vettore di dimensioni opportune, ecc...

    Ora, non so quale sia lo scopo esatto di questo programma, ma credo ti farebbe imparare un po' di cose sull'allocazione dinamica. Quindi, anche se è meno efficente, potrebbe essere più utili a fini didattici.
  • Re: Grandezza di un vettore di Strutture

    Si mi dice che devono rimanere in memoria! è proprio per quello che devo trovare un modo per allocarle dinamicamente! ma non so come fare e son pure tanto fuso! grazie comunque a tutti
  • Re: Grandezza di un vettore di Strutture

    Conosci

    malloc() realloc () free ()

    oppure

    new delete new [] delete []

    ?
  • Re: Grandezza di un vettore di Strutture

    No è proprio per quello che chiedevo aiuto! perchè non sapevo come utilizzare la malloc sulla funzione esterna di lettura del file
  • Re: Grandezza di un vettore di Strutture

    Puoi leggere i dati in una lista e poi allocare un array di puntatori di dimensioni opportune.

    Per sapere quanti elementi ci sono nel file basta incrementare un contatore a ogni lettura.

    Una lista è un insieme di struct. Ognuna contiene i dati e il puntatore alla struct successiva. Normalmente una struttura è salvata tramite un puntatore al primo elemento.

    Ogni volta che leggi un elemento, allochi una nuova struct e la aggiungi alla lista. L'elemento successivo all'ultimo sarà NULL.

    Dopo aver letto tutti gli elementi, allochi un vettore di puntatori e gli assegni l'indirizzo di ogni struct. ( passaggio non necessario per stampare i dati)
  • Re: Grandezza di un vettore di Strutture

    Tutto sulla malloc ()
  • Re: Grandezza di un vettore di Strutture

    Se devono rimanere in memoria hai due semplici strade :

    1) leggi tutto il file una prima volta e conti il numero di righe presenti; con quel numero allochi dinamicamente il vettore (con la funzione malloc) e rileggi il file avendo allocato il numero corretto di elementi

    2) leggi il file una sola volta usando la funzione realloc per allocare lo spazio per le nuove linee man mano che le leggi

    Dato che non hai mai usato le funzioni in questione, ti suggerirei proprio di partire dalla seconda soluzione (anche se sarebbe migliorabile, ma ci penserà puntualmente l'omonimo utente a dirtelo ...).

    In pratica devi studiare bene e adottare la funzione

    realloc

    http://www.cplusplus.com/reference/cstdlib/realloc
Devi accedere o registrarti per scrivere nel forum
21 risposte