Domanda

Non capisco come questo accada. Questo è parte del mio codice ..

   int isGoal(Node *node, int startNode){

       int i;
   .
   .
   }

Quando il debug questo utilizzando gdb ho scoperto che 'i' è stata assegnata a l'indirizzo di memoria che sono stati assegnati in precedenza.

(gdb)print &node->path->next
$26 = (struct intNode **) 0xffbff2f0

(gdb) print &i
$22 = (int *) 0xffbff2f0

node-> percorso-> successivo è stato già definito al di fuori di questa funzione. Ma, come u può vedere che condividono lo stesso indirizzo, che ad un certo punto fare il punto puntatore in un altro luogo, quando il i contatore è cambiato.

ho compilato utilizzando gcc su Solaris piattaforma Qualsiasi aiuta sarebbe molto apprezzato ..

È stato utile?

Soluzione

Due possibilità:

  • È stato compilato con ottimizzazioni e questo è fonte di confusione gdb (ad esempio i potrebbe essere ottimizzato via, in modo che non ha in realtà alcun indirizzo)
  • node->path non indica memoria allocata correttamente. Ad esempio tale puntatore poteva essere impostato per scegliere un oggetto in pila che successivamente fatto di portata.

Altri suggerimenti

La memoria per i è presa dal risma , o quello in C è talvolta chiamato "memorizzazione automatica."

Il contenuto della memoria assegnate dalla pila non sono valide dopo la funzione dichiara che lo stoccaggio è tornato. Ad esempio, la funzione isGoal() assegna stack di archiviazione per il i variabile e lo stoccaggio esiste solo fino al momento in cui i rendimenti isGoal().

Il motivo che si vede l'indirizzo di i, &i ha già esisteva durante il vostro programma è che l'area di memoria di stack è continuamente riutilizzato. Prima di ciò che si vede in gdb, è stato memorizzato l'indirizzo di una variabile di stack in node->path->next.

:

Per ottenere la memoria che resta valida dopo la funzione assegnazione è tornato, è necessario utilizzare malloc() e free() per ottenere quello che viene chiamato "memoria dinamica" o, talvolta, memoria dal "mucchio".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top