Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [c] conoscere se un puntatore ad una struct punta ancora alla struct

    ragazzi ho un certo codice in cui vengono allocate dinamicamente alcune struct....

    durante l'esecuzione del codice può essere che queste struct vengono deallocate (usando free)

    posso sapere durante l'esecuzione se il puntatore che puntava ad una di queste struct, punta ancora ad una struct valida (cioè su cui non è stata usata la funzione free() )?

    thx

  2. #2
    pensandoci potrei confrontare la sizeof puntanta dal mio puntatore con la sizeof della mia struct "costante" (il cui valore è 8 tra l'altro)

    cioè potrei fare cosi
    codice:
     if (  sizeof(*myPtrToStruct)!=sizeof(struct mystruct) )
       //> puntatore deallocato con free
    che ne dite?

  3. #3
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Se deallochi il puntatore alla struttura con free(), nell'istruzione successiva settalo a NULL.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Segui l'indicazione di shodan e non fare quel confronto con il sizeof ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    e si avevo pensato anche io a quelllo il problema è che dealloco le struct in una funzione e ho il puntatore a questa struct da un'altra parte...

    dovrei passare il puntatore che punta a quel puntatore alla funzione per farlo settare a NULL nel caso di deallocazioni (non so neanche se posso passare il puntatore ad un variabile puntatore, ma penso di si)

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Tra l'altro, annullando il puntatore con dopo la free() eviti anche il problema di una seconda free() accidentale: infatti se provi a deallocare lo spazio in memoria due volte per lo stesso puntatore hai un errore run-time sulla seconda deallocazione mentre invece, se dopo la prima annulli il puntatore, anche un'eventuale seconda free() "accidentale" non ti darebbe problemi perché equivarrebbe a fare free(NULL) che non comporterebbe nessun errore run-time.

    EDIT: (visto dopo)

    (non so neanche se posso passare il puntatore ad un variabile puntatore, ma penso di si)
    Certo che puoi... ed è proprio quello che devi fare in questo caso.
    every day above ground is a good one

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