Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269

    [C++]Errore di segmentazione

    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"...

    Con i sogni possiamo conoscere il futuro...

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Usi un puntatore a char per String
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Come potrei risolvere il problema?
    Non ho dichiarato bene il tipo di dati String?
    Con i sogni possiamo conoscere il futuro...

  4. #4
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Ho risolto dichiarando in questo modo il tipo di dati "String"

    codice:
    typedef char String[100];
    Ma potrei dichiarare "String", senza dargli una dimensione?

    se si, come?
    Con i sogni possiamo conoscere il futuro...

  5. #5
    andava bene anche come prima, semplicemente devi allocare lo spazio per quel char*, altrimenti è solo un puntatore che non punta a nulla di noto e, quindi, con tutta probabilità ad una zona con divieto di lettura/scrittura per il tuo programma

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    21
    Ancora i puntatori non sono il mio forte, quindi avrei una domanda.
    Nella funzione insert_offerta, dato che elenco è un puntatore ad offerta, non si dovrebbe accedere ai suoi elementi con -> ?

    Ho provato a portare elenco.nomeFornitore nel main ( per semplicità non ho considerato l'array di elementi offerta), e se uso l'operatore punto mi da errore, mentre con -> no.. Perchè nel main sì, mentre nella funzione no?

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.