Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    12

    [C++/OOP] lista di stringhe e allocazione dinamica

    Salve ragazzi, mi serve ancora il vostro aiuto...

    L'esercizio mi chiede di costruire una lista di nomi, per evitare di allocare staticamente un array sovradimensionato di char ho provato ad utilizzare l'operatore new per allocare memoria dinamicamente, questo è quanto per ora ho fatto:

    struct nome{
    char * name;
    nome * succ;
    };
    --------------------
    class lista_nomi{
    public:
    nome * ptr_testa;
    void inserisci();
    --------------------
    void lista_nomi::inserisci(){
    nome * l;
    l=new nome;
    l->name=new char;
    cout<<"Inserisci il nome:\t";
    cin>>l->name;
    l->succ=ptr_testa;
    ptr_testa=l;
    }
    ______________________
    Qualche dubbio sul corretto uso dell'operatore new sinceramente ancora ce l'ho....comunque il programma sembra funzionare tranne se inserisco un nome contenente 8 caratteri o più....sapete dirmi come mai???
    Al di là del problema secondo voi è un programma che sta "in piedi"? cioè ci sono grandi errori concettuali? si può fare in altro modo?(a parte l'uso di un array di stringhe a dimensione fissa).

    ultima cosa(meno importante per ora...), con new char come avviene "la decisione" di quanta memoria bisogna allocare?

    (ho provato ad usare lo stesso codice in un'altro programma a parte costituito solo dal main, senza liste e non mi da problemi...)

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No ... new char vuol dire che riservi lo spazio per 1 carattere e non può andare bene ...

    Utilizza

    l->name=new char[50];

    per riservare 50 caratteri (compreso il terminatore).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    12
    ok grazie, comunque il procedimento/logica per allocare la memoria dinamicamente è giusta?

    però perchè con questo codice:

    int main(int argc, char** argv) {

    char * n;
    n=new char;
    cout<<"Inserisci nome\t";
    cin>>n;

    cout<<"nome= "<<n<<endl;

    return 0;

    non ho problemi?e comunque nella soluzione della lista ho problemi solo per stringhe con più di 7 caratteri perchè? tanto per capire...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    No ... quel codice è sbagliato.

    Non è che non hai problemi ma il fatto è che scrivi in memoria oltre lo spazio riservato alla variabile. Se la memoria che "sporchi" non è importante ai fini dell'esecuzione del programma, allora non succede nulla e (apparentemente) ti sembra che il programma sia a posto.
    Altrimenti hai un crash (ed è la situazione migliore dato che ti evidenzia il problema).

    Con la new char devi indicare quanti caratteri riservare ...

    Non so se hai studiato il C, ma non è differente a parte il fatto che allochi la memoria con funzioni apposite e non con il new.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    12
    ok grazie 1000! gentilissimo

    ps - mi sono spiegato male, volevo sapere se il modo in cui ho dichiarato il puntatore all'interno della struct per poi allocare memoria nella funzione "inerisci" è esatto o meglio se è una cosa "ragionevole" da fare...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.