/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
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
> >
> >
>
>



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste