Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [c] free() ...

  1. #1

    [c] free() ...

    Ho un dubbio...
    Ho un vettore di struct, allocato con calloc e puntato da g->ps, e vorrei deallocarlo, la mia funzione non va, dà seg.fault.
    codice:
    int remove_p ( tipo_g g)
    {
    tipo_p p;
    
    p = g->ps;/*ps è l'array che voglio deallocare*/
    
    while(p!= NULL)
      {
        free(p->stringa);/*dealloco per ogni elemento un suo campo puntato da "stringa", che avevo allocato con calloc*/
        p= p+1;
      }
    free(g->ps);/*dealloco tutta la mem riservata da calloc al vettore ps*/
    }
    Cos'è che non va?

  2. #2
    codice:
    while(p!= NULL)
    p non potrà mai essere NULL, visto che continui ad incrementarlo di 1, per cui il while continua a ripetersi e tenti di liberare memoria mai allocata.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3

  4. #4
    infatti ho provato a sostituirlo con un for, con la cond di terminazione un po' diversa, funziona tutto, 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.