Gå til innhold

Adressen til peker forandres "tilfeldig" - C [Løst]


Anbefalte innlegg

Har en fuksjon (i c) som tar inn en peker til en global strukt. Når jeg prøver og tilordne lokale variabler av elementene i strukten så forandres plutselig adressen til pekeren på enkelte steder i koden. Adresse forandringen ser ut til og skje på samme plass hver gang, men om jeg tar bort linjene fra koden så skjer de bare andre plasser i stedet.

 

int Funk(struktPtr *ptr)
{
int a = ptr->a;
int b = ptr->b;
int c = ptr->c;
.
.
.
return something
}

 

a = går fint, men etter b= så forandres adressen til ptr plutselig, så c= gir feil. Om jeg stopper i debuggeren etter b= og så forandrer adressen til det den var før den linja så gir c= rett igjen.

 

hva kan gjøre dette?

Endret av mortefos
Lenke til kommentar
Videoannonse
Annonse

Jeg ville tro at du har buffer-overrun et eller annet sted i koden din.

Jeg har vært borti veldig like situasjoner som har vist seg å komme fra buffer-overrun et helt annet sted i koden.

 

Prøv å kutt ut deler av programmet helt til det fungerer (håper det ikke er store programmet ;) )

Hvis du ikke kompilerer med debug kode så gjør det.

 

Ellers så får du ha lykke til, buffer-overrun kan være vanskelig å finne.

Lenke til kommentar
Jeg ville tro at du har buffer-overrun et eller annet sted i koden din.

Jeg har vært borti veldig like situasjoner som har vist seg å komme fra buffer-overrun et helt annet sted i koden.

 

Høres ut som en minnelekasje ett sted ja, noe som kan være helt "¤%¤#&%&/¤#"¤# å finne manuellt.

Hvis du er på linux er Valgrind ett godt debugging program som hjelper deg med å finne hvilke variabler du allokerer minne til, men glemmer å slette (eller tilordner for mye data til).

 

Om du er på windows så er jo Visual Studio (Visual C++ Express er gratis) veldig bra (ihvertfall) til debugging og gir utrolig mye informasjon om hva som skjer i programmet ditt.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...