Утечка памяти?

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by DooD, 13 Mar 2012.

Thread Status:
Not open for further replies.
  1. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    Комрады,вот функа
    Code:
    function ScreenCopy: TBitmap;
    var
      DC: HDC;
      ABitmap: TBitmap;
    begin
    
      DC := GetDC(GetDesktopWindow);
    
      ABitmap := TBitmap.Create;
      ABitmap.Width  := GetDeviceCaps(DC, HORZRES);
      ABitmap.Height := GetDeviceCaps(DC, VERTRES);
    
      BitBlt(ABitmap.Canvas.Handle, 0, 0, ABitmap.Width, ABitmap.Height, DC, 0, 0, SRCCOPY);
      releasedc(GetDesktopWindow,DC);
      deletedc(dc);
    
      abitmap.Canvas.Free;
    
      Result := ABitmap;
    
      end;
    которая должна делать снапшот.Но в чем прикол,при каждом вызове жрется память,вроде уже убираю за собой как в мсдн посмотрел,а память все равно жрется.Если в конце делать abitmap.free; то снапшот не делается.Взгляните свежим оком что не так то?Как устранить эту проблему.
     
  2. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    а,сделал другую функцию,через getsystemmetrics, теперь не жрет.Но почему в той жрало.?
     
  3. mironich

    mironich Elder - Старейшина

    Joined:
    27 Feb 2011
    Messages:
    733
    Likes Received:
    73
    Reputations:
    19
    Тыже освободил уже обьект?
    А поч только поле освобождаеш?

    А если не освобождать перед возвращением рез-тата то кто ее осводит?
     
  4. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    937
    Likes Received:
    162
    Reputations:
    27
    Если будешь использовать свою функцию примерно так, как ниже, тогда утечек не должно быть:
    Code:
    var
      b: TBitmap;
    begin
      b := ScreenCopy;
      ...
      b.Free;
    end;
    Строчка
    Code:
    abitmap.Canvas.Free;
    не нужна. А зачем?
     
  5. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    да,блин нужно было глобальный битмап сделать,по пьяни ступил.Все тему делл.
     
Thread Status:
Not open for further replies.