|
| Mem leaks Fra : Thomsen |
Dato : 09-10-01 22:03 |
|
Hej,
Jeg har et problem med mit program. Når jeg kører nogle funktioner og
procedurer
kan jeg i igennem Win2K's jobliste se, at programmet ikke frigiver de
ressourcer som den skal.
Metoderne bruger en del strings og Tmemorystreams, men alle streams'ene er
jeg sikker på bliver
freed.
Det er vel ikke nødvendigt at frie strings'ene ved metodens afslutning?
(setLength(s, 0) måske?)
Og et andet spørgsmål:
Jeg bruger en del records som jeg opretter med fx. New(rec).
Når jeg så giver "attributterne" værdier, hvad er forskellen så om jeg
bruger:
rec^.filename : = s;
eller
re^c.filename : = s;
?
Mvh,
Anders Thomsen
| |
Thomas Rose (09-10-2001)
| Kommentar Fra : Thomas Rose |
Dato : 09-10-01 22:20 |
|
Hej Thomsen,
"Thomsen" <andersthomsen@mobilixnet.dk> wrote in message
news:JAJw7.246$Hr5.58027028@news.orangenet.dk...
> Hej,
>
> Det er vel ikke nødvendigt at frie strings'ene ved metodens afslutning?
> (setLength(s, 0) måske?)
Nej, de nedlægges automatisk.
> Og et andet spørgsmål:
> Jeg bruger en del records som jeg opretter med fx. New(rec).
> Når jeg så giver "attributterne" værdier, hvad er forskellen så om jeg
> bruger:
> rec^.filename : = s;
> eller
> re^c.filename : = s;
Øh... det andet eksempel giver ikke mening... men husker du at nedlægge dine
records med Dispose?
Cheers,
Thomas
| |
Thomsen (09-10-2001)
| Kommentar Fra : Thomsen |
Dato : 09-10-01 23:01 |
|
> > rec^.filename : = s;
> > eller
> > re^c.filename : = s;
>
> Øh... det andet eksempel giver ikke mening... men husker du at nedlægge
dine
> records med Dispose?
Wops, der var jeg vist lidt for hurtig...
Der skulle stå:
rec^.filename : = s;
eller
rec.filename : = s;
(rec er defineret således:
type Trec = record
filename : String;
...
..
Prec = ^TRec;
og i VAR:
rec : PRec;
)
Og ja, jeg bruger dispose for at frigøre den.
-Thomsen
"Thomas Rose" <trose@get2net.dk> wrote in message
news:3bc36a26$0$42099$edfadb0f@dspool01.news.tele.dk...
> Hej Thomsen,
>
> "Thomsen" <andersthomsen@mobilixnet.dk> wrote in message
> news:JAJw7.246$Hr5.58027028@news.orangenet.dk...
> > Hej,
> >
> > Det er vel ikke nødvendigt at frie strings'ene ved metodens afslutning?
> > (setLength(s, 0) måske?)
>
> Nej, de nedlægges automatisk.
>
> > Og et andet spørgsmål:
> > Jeg bruger en del records som jeg opretter med fx. New(rec).
> > Når jeg så giver "attributterne" værdier, hvad er forskellen så om jeg
> > bruger:
> > rec^.filename : = s;
> > eller
> > re^c.filename : = s;
>
> Øh... det andet eksempel giver ikke mening... men husker du at nedlægge
dine
> records med Dispose?
>
> Cheers,
> Thomas
>
>
| |
Thomas Schulz (10-10-2001)
| Kommentar Fra : Thomas Schulz |
Dato : 10-10-01 11:57 |
|
> Prec = ^TRec;
>
> og i VAR:
> rec : PRec;
så skal du
* rec^.filename : = s; *
idet du dereferere en pointer
Thomas
| |
Casper A. Hansen (11-10-2001)
| Kommentar Fra : Casper A. Hansen |
Dato : 11-10-01 08:40 |
|
> rec^.filename : = s;
> eller
> rec.filename : = s;
> -Thomsen
Der er ingen forskel på om du bruger ^ eller ej. Den underliggende
maskinkode er identisk.
type
TMyRec = record
a : String;
b : String;
end;
PMyRec = ^TMyRec;
....
var
wRec : PMyRec;
wString : String;
begin
new(wRec);
wString := 'MyString';
wRec.a := wString;
wRec^.b := wString;
dispose(wRec);
end;
Ovenstående giver ikke memory leaks.
Her i firmaet har vi en memory manager der kan vise evt. memory leaks.
/Casper
| |
Thomas Schulz (11-10-2001)
| Kommentar Fra : Thomas Schulz |
Dato : 11-10-01 19:12 |
|
> Der er ingen forskel på om du bruger ^ eller ej. Den underliggende
> maskinkode er identisk.
Jeg mener det kommer an på Delphi version?
Thomas
| |
Thomas Lyngsdal (14-10-2001)
| Kommentar Fra : Thomas Lyngsdal |
Dato : 14-10-01 14:09 |
|
Bruger du nogle API kald???
"Thomsen" <andersthomsen@mobilixnet.dk> wrote in message
news:JAJw7.246$Hr5.58027028@news.orangenet.dk...
> Hej,
>
> Jeg har et problem med mit program. Når jeg kører nogle funktioner og
> procedurer
> kan jeg i igennem Win2K's jobliste se, at programmet ikke frigiver de
> ressourcer som den skal.
> Metoderne bruger en del strings og Tmemorystreams, men alle streams'ene er
> jeg sikker på bliver
> freed.
> Det er vel ikke nødvendigt at frie strings'ene ved metodens afslutning?
> (setLength(s, 0) måske?)
>
> Og et andet spørgsmål:
> Jeg bruger en del records som jeg opretter med fx. New(rec).
> Når jeg så giver "attributterne" værdier, hvad er forskellen så om jeg
> bruger:
> rec^.filename : = s;
> eller
> re^c.filename : = s;
>
> ?
>
> Mvh,
> Anders Thomsen
>
>
| |
Thomsen (19-10-2001)
| Kommentar Fra : Thomsen |
Dato : 19-10-01 13:37 |
|
Masser : )
-Thomsen
"Thomas Lyngsdal" <tl@jdpartner.dk> wrote in message
news:3bc98e67$0$11604$ba624c82@nntp01.dk.telia.net...
> Bruger du nogle API kald???
>
> "Thomsen" <andersthomsen@mobilixnet.dk> wrote in message
> news:JAJw7.246$Hr5.58027028@news.orangenet.dk...
> > Hej,
> >
> > Jeg har et problem med mit program. Når jeg kører nogle funktioner og
> > procedurer
> > kan jeg i igennem Win2K's jobliste se, at programmet ikke frigiver de
> > ressourcer som den skal.
> > Metoderne bruger en del strings og Tmemorystreams, men alle streams'ene
er
> > jeg sikker på bliver
> > freed.
> > Det er vel ikke nødvendigt at frie strings'ene ved metodens afslutning?
> > (setLength(s, 0) måske?)
> >
> > Og et andet spørgsmål:
> > Jeg bruger en del records som jeg opretter med fx. New(rec).
> > Når jeg så giver "attributterne" værdier, hvad er forskellen så om jeg
> > bruger:
> > rec^.filename : = s;
> > eller
> > re^c.filename : = s;
> >
> > ?
> >
> > Mvh,
> > Anders Thomsen
> >
> >
>
>
| |
|
|