Avatar billede ultik Nybegynder
21. januar 2001 - 15:11 Der 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 ????

Med venlig hilsen
Ulrik Jensen
ulrik@qcom.dk
Avatar billede ultik Nybegynder
21. januar 2001 - 15:12 #1
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.....
Avatar billede soepro Nybegynder
22. januar 2001 - 08:41 #2
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.

Læg koden herud, så skal jeg kigge på den.
 
Avatar billede ultik Nybegynder
22. januar 2001 - 17:15 #3
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......

Avatar billede ultik Nybegynder
22. januar 2001 - 17:17 #4
når jeg siger at det er en konstant, mener jeg at det kunne ligeså godt være en konstant.....
Avatar billede ultik Nybegynder
11. februar 2001 - 16:10 #5
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
Avatar billede soepro Nybegynder
12. februar 2001 - 08:13 #6
Jeg takker.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester