Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    80

    [C] diminuire dimensione locazione di memoria

    Ciao,

    ho questa area di memoria:

    codice:
     lista_item= calloc(itemtotali,sizeof(int));
    dovendo eliminare un elemento al suo interno, dovrei ridimensionarla e fare in modo di non perdere gli altri elementi..

    pensavo di usare realloc, ma poi come posso fare per riscrivere all'interno della nuova area gli altri elementi rimasti?

    grazie..

  2. #2
    Devi rimuovere un elemento in qualunque posizione dell'array? In tal caso:
    - se è l'ultimo elemento non c'è alcun problema - chiama la realloc e fine;
    - se è un elemento centrale, "sposta" in blocco gli elementi che lo seguono sizeof(int) bytes prima (usa la memmove), e quindi usa la realloc.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    80
    ok, provo

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    80
    scusami, ma non riesco a capire come individuare il punto in cui è stato eliminato l'elemento..cioè io dovrei fare

    memmove( destinazione, origine, sizeof(int))

    ma origine e destinazione come le trovo?

  5. #5
    Se devi eliminare l'i-esimo elemento devi spostare tutti gli elementi dall'i+1 all'ultimo di un "passo" indietro...
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    80
    si si quello l'ho capito... mi sono spiegato male prima...praticamente io conosco l'item cancellato, ma non la sua posizione all'interno di lista_item, quindi volendo posso fare cosi?

    codice:
    /*conosco item*/
    for(i=0;i<dimensionelista;i++) {
    if(lista_item[i]==item)
    memmove(lista_item[i],lista_item[i+1],sizeof(int));
    }
    
    lista_item=realloc(lista_item, (dimensionelista-1)*sizeof(int))

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Devi conoscere la posizione perché stai parlando di un valore numerico intero che potrebbe stare ovunque.

    Per capirci, se elimini un 5, con quel tuo codice trovi la posizione del primo 5 che incontra ma non quello che sicuramente cerchi.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    80
    se i numeri nella lista però sono tutti diversi tra loro va bene, giusto?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ovviamente sì.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2011
    Messaggi
    80
    ok, allora a posto...grazie!

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.