Strano problema di chiusura

di il
4 risposte

Strano problema di chiusura

Ragazzi ho fatto un semplice programmino sulle strutture in forma modulare. Il programma è abbastanza intuitivo quindi non sto a spiegarlo. Il problema è che compila correttamente ma quando inserisco il primo valore di chiave si chiude il programma senza capire il perchè.
Il file tabella.h è il seguente:

#ifndef TABELLA_H
#define TABELLA_H

struct Record 
{
       char chiave;
       int valore;
};

typedef Record *Tabella;

void crea_tabella (Tabella, int);
void inserimento (Tabella, int);
void stampa (Tabella, int);
void dealloca_tabella (Tabella);

#endif
Il file Tabella.cpp è questo:

#include <iostream>
#include "Tabella.h"

using namespace std;


void crea_tabella (Tabella t, int entry)
{
     t = new Record[entry];
}

void inserimento (Tabella t, int entry)
{
     for (int i=0; i<entry; i++)
     {
         
        cout << "Inserisci la entry di posizione " << i << endl;
        cout << "Chiave? ";
        cin >> t[i].chiave;
        cout << "Valore? ";
        cin >> t[i].valore;
        cout << endl;
     }
}
     
void stampa (Tabella t, int entry)
{
     for (int i=0; i<entry; i++)
     {
     
        cout << "Entry di posizione " << i << endl;
        cout << "Chiave? " << t[i].chiave;
        cout << "Valore? " << t[i].valore;
        cout << endl;
     }
}
     
void dealloca_tabella (Tabella t)
{
        delete [] t;
        cout << "Deallocazione della tabella riuscita\n";
}
Il main è questo:

#include <iostream>
#include <cstdlib>
#include "Tabella.h"

using namespace std;

int main ()
{
     Tabella tabella;
     int num_entry;
     
     cout << "Creazione della tabella. Quante entry? ";
     cin >> num_entry;
     cout << endl;
     crea_tabella (tabella, num_entry);
     cout << "Creata una tabella con " << num_entry << " entry" << endl;
     cout << "Inserimento dati nella tabella." << endl << endl;
     inserimento (tabella, num_entry);
     cout << endl;
     stampa (tabella, num_entry);
     dealloca_tabella (tabella);
     
     cout << endl << endl;
     system ("PAUSE");
     return 0;
}
Grazie.

4 Risposte

  • Re: Strano problema di chiusura

    Ok. Il problema sta nella funzione crea_vettore infatti se non la richiamo e scrivo tabella = new Record[num_entry]; il programma funziona correttamente. Solo che non capisco perchè la funzione non funziona (scusate il gioco di parole). Insomma la funzione mi alloca dinamicamente la memoria, esattamente come quando lo scrivo esplicitamente. COme mai?
  • Re: Strano problema di chiusura

    Leggi quà:
    Cosi impari le cose per bene una volta x tutte.
    usa il traduttore di google se non capisci.
  • Re: Strano problema di chiusura

    Devi usare passggio per riferimento non x valore. Stai passando il valore del puntatore e non un suo alias (per riferimento)
  • Re: Strano problema di chiusura

    Vero porc...Infatti funziona mettendo gli alias nelle varie funzioni. Grazie ancora. Speriamo che mi entrino definitivamente in testa queste cose...
Devi accedere o registrarti per scrivere nel forum
4 risposte