Salve ragazzi ho scritto il seguente programmino in C++, praticamente inserisco dei valori in una struttura e dopo devo stampare il record che ha il campo "importo" minore di tutti gli altri.

ecco il codice:
codice:
#include<iostream>

using namespace std;


typedef char *String;

typedef struct
{
    unsigned int id_cliente;
    String nomeFornitore;
    double importo;
}offerta;



void insert_offerta(offerta *elenco, int n, int i);
void bestoffert(offerta *elenco, int n);

int main()
{   
    offerta *elenco;

    int n, i;

    cout<<"Inserisci il numero delle offerte:"<<endl;
    cin>>n;

    elenco=new offerta[n];

    insert_offerta(elenco, n, 0);
    bestoffert(elenco, n);
}

void insert_offerta(offerta *elenco, int n, int i){
    /* SCOPO:
     * Mi permette di inserire ricorsivamente
     * le offerte nella struttura dati dinamica
     */
    if(i==n){
        cout<<"L'elenco è pieno!"<<endl;
    } else {
        cout<<"Inserisci l'id del fornitore: "<<endl;
        cin>>elenco[i].id_cliente;
        cout<<"Inserisci il nome del fornitore: "<<endl;
        cin>>elenco[i].nomeFornitore;
        cout<<"Inserisci l'importo: "<<endl;
        cin>>elenco[i].importo;
        insert_offerta(elenco, n, i+1);
    }
}

void bestoffert(offerta *elenco, int n){
    int j, p;
    double min;
   
    min=elenco[0].importo;
   
    /* SCOPO:
     * Mi trova l'offeta minimia presente
     * nell'elenco
     */

    for (j=1; j<n; j++){
        if(min > elenco[j].importo){
            min=elenco[j].importo;
            p=j;
        }
    }
   
    cout<<"AZIENDA CON OFFERTA MIGLIORE: "<<endl;
    cout<<"ID cliente: " <<elenco[p].id_cliente;
    cout<<"Nome fornitore: "<<elenco[p].nomeFornitore;
    cout<<"Importo migliore: "<<elenco[p].importo;
}
Funziona tutto, solo che una volta inserito il "Nome fornitore", mi esce: "Errore di segmentazione"...