Wyciek w gotowcach [kalkulator]

0

Mógłby ktoś rzucić okiem dlaczego dla wyrazenia

'(12/7.5)'

jest wyciek ? (Bez nawiasow OK).

http://4programmers.net/Delphi/Gotowce/Prosty_kalkulator

0

możesz sprecyzować o co Ci chodzi z tym wyciekiem (btw daj cały projekt gdzieś spakowany bo nikomu - mnie na pewno :p - nie będzie się chciało tego przeklejać z gotowców)

0

Podejżewam że się zapatrzył na redtube ;-P

0

Dałem

ReportMemoryLeaksOnShutdown := True;

I gdy wpiszesz jakies wartosci - policzy sie i jest OK. Ale jak dasz onawiasowane to zareportuje Delphi o wycieku.

Mam nadzieje ze nie bedzie problemem to ze to jest D2009 ..... Bez kompilowania nawet mozesz zobaczyc ten komunikat.

http://www.maciejmt.yoyo.pl/KALK.zip

@up : a co to RedTube ? :P

0

tak powinno wyglądać OnClose formy

procedure TfMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  WE.Free;
  WY.Free;

  while POM.Count > 0 do
    Dispose(POM.Pop);
  POM.Free;
end;
0

Aha, ale chyba wtedy to sprawdzalem i wszystkie County byly rowne zeru..... Tylko jest jedno ALE.... Im wiecej obliczam, tym wiekszy wyciek(Wiec na biezaco w AnSyn z tymi nawiasami jest cos nie tak jeszcze). A zalozenie jest takie, ze aplikacja nie bedzie zamykana(aplikacja serwisowa). Wiec w procedurze AnSyn musi byc powazniejszy blad. Jesli bys jeszcze spojrzal to bylbym BARDZO wdzieczny ;-)

0

Wyciek jest tutaj:

    case Wejscie[Poz] of
    '(', ')':
      begin
        New(El);  //<<<<<<<<<
        El^.Typ := toOp;
        El^.Op := Wejscie[Poz];
        WE.Push(El);
        Inc(Poz);
      end;
0

@Opi wyciek jest gdzie indziej - zauważ, że w InToPost wszystkie niezwolnione elementy są przepisywane to POM

  while WY.Count > 0 do
    POM.Push(WY.Pop);

a w OnClose Formy POM jest po prostu zwalniane przez Free bez sprawdzenia czy coś w sobie ma czy nie. Jak ma to tych elementów nikt nie usuwa. Robi to to, co podałem kilka postów wcześniej. Na podobnej zasadzie wypadało by jeszcze sprawdzić WE i WY.

BTW ten kod to tylko szkic jak to powinno wyglądać i nigdy w takiej postaci nie powinien znaleźć się w app produkcyjnej!

0

EurekaLog tak wskazała...

0

No na nawiasach musi być wyciek, tak jak mowilem. Dla wyrazen bez nawiasu, wycieku nie ma.

a czy metoda tu jest zla czy cos ? Dla mnie wystarczajaco szybko i dobrze liczy (0.002 ms). Gdzies na biezaco trzeba zwolnic operator, bo z kazdym wyrazeniem wyciek rosnie.

jakis pomysl jak naprawic ? :-)

@misiek, dalem w onclose

  showmessage(Inttostr(WE.Count));
   showmessage(Inttostr(WY.Count));
    showmessage(Inttostr(POM.Count));

I elementow nie ma, w wyrazeniu z nawiasami

0

@maciejmt masz wycieki, stos i sterta czyszczone są dopiero przy kończeniu programu - powinny być po każdej operacji. Nie ma sprawdzania poprawności wprowadzonych danych. Tak jak pisałem to jest szkielet i trzeba go dopiero obudować. Najbardziej mi się nie podoba, że nie jest to opakowane w klasę i że proces obliczania został podzielony na dwa etapy - jak się drugi wysypie to pozostaną śmieci na WE/WY/POM

0

Poprawnosc zakladam ja, predzej odpowiednio przetwarzam ciag wejsciowy.

Troche popatrzylem i znalazlem:

          if Znak^.Op = ')' then
          begin
            Dispose(Znak);   /// <<---- tu brakowalo
            while PElement(POM.Peek)^.Op <> '(' do
              WY.Push(POM.Pop);
            Dispose(POM.Pop);
          end

Ale dzieki za poswiecony czas [soczek]

1 użytkowników online, w tym zalogowanych: 0, gości: 1