21. januar 2001 - 15:11Der er
4 kommentarer og 2 løsninger
Hukommelses lækage
Hej !
Jeg har et problem med et program jeg er igang med.
Jeg skal lige sige at jeg arbejder i Turbo C++, og det er altså et DOS program....
Jeg har i en af mine filer deklareret denne her :
int canvas[8] = {[ 8 tal her ]};
Den bruger jeg således :
fillpoly(4, canvas);
Dette virker også fint. Problemet er, at mens jeg kører programmet, kommer jeg nogle gange ud for, at de sidste 2 koordinater i canvas bliver overfloodet, og sat til nogle ret høje tal, og så bliver mit lærred jo ikke tegnet rigtigt !....
Jeg har så prøvet at finde frem til den kode der gør det, men må konstatere, at det er praktisk talt umuligt. Jeg har nemlig fundet en kombination af input der får programmet til at gøre det HVER GANG, relativt hurtigt, og når jeg så sætter et breakpoint og følger processen, kan jeg også se, at det sker inde i EN bestemt procedure. Men når jeg så kører forsøget forfra, og tracer ind i den procedure, så laver den ikke fejlen ! det gør den tilgengæld næste gang proceduren bliver kaldt, igen medmindre jeg tracer ind i den !
DET DRIVER MIG TIL VANVID ! DEN BUG VIL IKKE FANGES !!!! ARGHH ! HVAD GØR JEG !!!
Jeg skal nok poste koden, men jeg har den ikke lige på den her maskine, så det bliver nok først på mandag...... indtil da, er der nogen der kan kende ovenstående situation ????
det skal lige siges at jeg på intet sted i min kode modificerer canvas, jeg sender den ikke engang til funktioner som en pointer, værdierne bliver sat når den initialiseres, og ellers ikke.....
Det sker efter min erfaring typisk fordi man enten:
* Bruger et index der bliver for højt (> 7 i dit tilfælde.) * Caster en pointer til en anden (og forkert) type. * Overfører en pointer til hele tabellen, i stf. til det specifikke element. * Har en anden variabel ramt af et af d.o., hvilket bevirker overskrivning af din variabel.
altså ang. første kan det som sagt ikke lade sig gøre, da jeg ALDRIG i koden ændrer på canvas, det er faktisk en konstant.......
\"Caster en pointer til en anden (og forkert) type.\"....... øhh den eneste casting jeg foretager mig er mellem ints og double, og de er ikke som pointere...
nr. 3 forstår jeg ikke :-( ?
det sidste er meget muligt ofcz....
skal nok lige få koden herud, men jeg har nu opdaget, at problemet, uden noget indgreb fra mig er forsvundet........ VIRKLIG TRÆLS BUG.....
vil dog gerne lige have koden kigget igennem alligevel, der er noget der siger mig jeg ikke er færdig med den bug her......
jeg har fundet problemet, det lå i en generel misforståelse, jeg har hele vejen igennem brugt char *\'ers til at gemme strenge i, uden at allokere hukommelse til dem, og det var altså der fejlen lå........ du får lige 50 for din hjælp soepro
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.