Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C] Copia puntatori

  1. #1

    [C] Copia puntatori

    Ho una struttura del tipo:

    typedef struct lista {
    char word[100]; /* Parola di lunghezza 100 */
    int occorrenza; /* Occorrenza della parola */
    struct lista *next; /* Puntatore all'elemento successivo */

    } lista;


    Il mio problema nasce quando devo creare una variabile di comodo per effettuare delle varie operazioni...

    Es.

    lista *key; /* Var di comodo */

    key = elenco /* Copia di un elemento della lista */

    Ma quando alla fine della funzione devo "liberare" la memoria logicamente perdo il puntatore che mi ero copiato!!! Ma questo nn deve succedere altrimenti addio lista!!! ^^

    Sicuramente sbaglio qua: "key = elenco"!!!

    Allora qual'è la soluzione???


    N.b. la var "key" lo allocata con calloc/malloc!!!
    Linguaggi : C/C++
    SO: WinXP, Slack 10

  2. #2
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Non potresti postare tutto il codice che non si capisce bene?

  3. #3
    Data la struttura "lista" composta da vari elementi, devo copiarmi un nodo di questa lista, in modo xò che quando libero la variabile temporanea nel venga deallocato anche il nodo della lista!!!
    Linguaggi : C/C++
    SO: WinXP, Slack 10

  4. #4
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Ci sono 2 modi:
    [list=1][*]Se nella lista ogni elemento è univoco basta che fai una ricerca[*]Altrimenti devi memorizzarti il puntatore[/list=1]

  5. #5
    con key=elenco; associ a key tutta la lista...
    Se tu fai un free ad uno dei due puntatori perdi tutta quanta la lista.. Dovresti scrivere una funzione per copiare i puntatori degli elementi successivi prima di deallocare la memoria...

    Se posti esattamente il listato come lo hai scritto te lo debugghiamo

  6. #6
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    Se copi un puntatore entrambi puntano alla stessa area di memoria, quindi se liberi uno, ti salta l'altro.
    O fai una copia dell'oggetto prima di smanettatci sopra o non liberarlo
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

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.