Allocazione dinamica in una funzione

di il
6 risposte

Allocazione dinamica in una funzione

Salve a tutti, ho un bel problema ormai da un po' su come allocare dinamicamente una qualsiasi struttura dati in una funzione.
Il mio problema, principalmente, è come passarlo poi in altre funzioni.
Ogni qual vota alloco una struttura dati in una funzione e poi la richiamo in un'altra mi da un errore.
Purtroppo, ora non posso dire con esattezza che tipo di errore è, perchè tutti i miei programmi li ho modificati, allocando dinamicamente le strutture nel main.
Ho necessità di saperlo, perchè, per esempio, quando vado a leggere un file, devo prima leggermi la lunghezza del file in una funzione, poi allocare nel main la struttura con la lunghezza del file e poi fare un'altra funzione dove apro sempre lo stesso file e immetto i valori nella struttura allocata.
C'è da dire inoltre che non sono proprio alle prime armi, ma nemmeno un buon programmatore .
Grazie in anticipo

6 Risposte

  • Re: Allocazione dinamica in una funzione

    Dacci il codice e avrai un chiarimento...
  • Re: Allocazione dinamica in una funzione

    Allora, il codice è semplice. Come scritto nella traccia, chiede di mettere in un array di struct i valori all'interno del file.
    Come vedrete, ho dovuto aprire e chiudere il file 2 volte, solo perchè ho allocato dinamicamente l'array nel main.
    Se lo avessi fatto nella funzione il tutto sarebbe stato più efficiente.
    Ritornando alla mia domanda, come posso allocare dinamicamente l'array e poi chiamarlo in un altra funzione?


    /*
    È dato un file di testo PEOPLE.TXT che contiene i dati di una serie di persone (non più di 20), una persona per riga.
    Più precisamente, ogni riga contiene nell'ordine:

    il cognome (non più di 20 caratteri, senza spazi intermedi)
    uno o più spazi
    il nome (non più di 20 caratteri, senza spazi intermedi)
    uno o più spazi
    la data di nascita nel formato gg/mm/aaaa
    uno e un solo spazio
    un carattere ('M' o 'F') che indica il sesso.
    Si chiede di scrivere un programma C che, dopo aver definito una struttura persona nel modo appropriato a quanto sopra:
    contenga una funzione lettura() che, dato il nome del file (ed eventualmente altri parametri se opportuno),
    legga i dati delle persone dal file e li metta in un array di persona di nome elenco;

    */

    #include<iostream>
    #include<fstream>
    #include<string.h>
    #include "nomi.h"


    using namespace std;




    void LeggiFile(int &cont);
    void ImmettiDati(Persona *individuo, int &cont);




    struct Data{
    int giorno;
    int mese;
    int anno;
    };




    struct Persona {
    string cognome;
    string nome;
    Data data_nascita;
    char sesso;
    };




    int main()
    {

    int cont=0;
    Persona *individuo=NULL;


    LeggiFile(cont);
    individuo=new Persona[cont];
    ImmettiDati(individuo, cont);
    }


    //M: Lettura file per contare il numero di righe
    void LeggiFile(int &cont){
    string riga;
    ifstream Leggi("People.txt");
    if(!Leggi){
    cout<<"errore";
    exit(1);
    }else
    while(!Leggi.eof())
    {
    getline(Leggi, riga);
    cont++;

    }
    Leggi.seekg(0);
    Leggi.close();

    }



    //M: Immssione degli elementi del file nell'array allocato dinamicamente nel main
    void ImmettiDati(Persona *individuo, int &cont)
    {
    int i=0;
    ifstream LeggiF("People.txt");
    if(!LeggiF){
    cout<<"errore";
    exit(2);
    }else
    while(!LeggiF.eof())
    {
    //cout<<"lol";
    LeggiF>>individuo.cognome;
    LeggiF>>individuo.nome;
    LeggiF>>individuo.data_nascita.giorno;
    LeggiF>>individuo.data_nascita.mese;
    LeggiF>>individuo.data_nascita.anno;
    LeggiF>>individuo.sesso;
    i++;
    }
    LeggiF.close();

    for(i=0;i<cont;i++){
    cout<<individuo.cognome<<" ";
    cout<<individuo.nome<<" ";
    cout<<individuo.data_nascita.giorno<<"/";
    cout<<individuo.data_nascita.mese<<"/";
    cout<<individuo[i].data_nascita.anno<<"/"<<" ";
    cout<<individuo[i].sesso<<endl;
    }
    }
  • Re: Allocazione dinamica in una funzione

    Alloca la memoria nella funzione e restituisci il puntatore.
  • Re: Allocazione dinamica in una funzione

    Dato che devo restituire il puntatore, come devo impostare il tipo della funzione?(int, void, char...)
    E quando restituisco il puntatore devo fare, per esempio: return *individuo?
  • Re: Allocazione dinamica in una funzione

    Persona *

    return individuo;
  • Re: Allocazione dinamica in una funzione

    Funziona!!
    Grazie mille ^_^
Devi accedere o registrarti per scrivere nel forum
6 risposte