Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2010, 19:07   #1
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
Злость Out of memory

где то в этом вот коде, в одном из таймеров, после минут 10 работы программы, на каждый шаг начинает выдавать Out of memory

Код:
procedure Check;
var
 i,j: integer;
begin
 for i:=1 to count do
 begin
  if List[i].flag<>true then
  begin
   if FindWindow(nil, pchar(List[i].Name))<>List[i].wnd then
   begin
    List[i].flag:=true;
    for j:=1 to 128 do
    begin
     if OSW[j]=integer(List[i].wnd) then
      OSW[j]:=-23;
    end;
   end;
  end;
 end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
 h,h1,h2: cardinal;
 Wnd: hWnd;
 buff: array [0..127] OF Char;
 p: PChar;
 i,j: integer;
 f: boolean;
begin
 i:=0;
 Wnd:=GetWindow(Handle, gw_HWndFirst);
 while Wnd<>0 do
 begin
  h:=Wnd;
  h1:=FindWindowEx(h, 0, 'WorkerW', nil);
  h2:=FindWindowEx(h1, 0, 'ReBarWindow32', nil);
  h1:=FindWindowEx(h2, 0, 'ComboBoxEx32', nil);
  h2:=FindWindowEx(h1, 0, 'ComboBox', nil);
  h1:=FindWindowEx(h2, 0, 'Edit', nil);
  p:=StrAlloc(255);
  SendMessage(h1,WM_GETTEXT,WParam(255),LParam(p));
  if (Wnd <> Application.Handle) and IsWindowVisible(Wnd) and (GetWindow(Wnd, gw_child) <> 0) and (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) and FileExists(p+'\pw.ps') then
  begin
   if AnsiUpperCase(GetExeNameByHandle(wnd))='EXPLORER.EXE' then
   begin
    f:=false;
    for j:=1 to 128 do
    begin
     if OSW[j]=wnd then
      f:=true;
    end;
    if f=true then
    else
    begin
     if Form2.Visible=false then
     begin
      inc(i);
      List[i].wnd:=wnd;
      List[i].Name:=string(buff);
      List[i].FullName:=p;
      List[i].flag:=false;
      count:=i;
      Form2.Edit1.Text:=List[i].Name;
      LastWin:=i;
      Form2.Timer1.Enabled:=true;
      Form2.Visible:=true;
      SendMessage(wnd,WM_SYSCOMMAND,SC_MINIMIZE,0);
     end
     else
     begin
      if Form2.Edit1.Text<>string(buff) then
       SendMessage(wnd,WM_SYSCOMMAND,SC_CLOSE,0)
      else
       SendMessage(wnd,WM_SYSCOMMAND,SC_MINIMIZE,0);
     end;
    end;
   end;
  end;
  Wnd:=GetWindow(Wnd, gw_hWndNext);
 end;
 Check;
end;

end.
есть предположение что это из за переменной p...пробовал освобождать FreeMemory(p); не помогает...помогите, дело в том что сроки горят, а программа отказываеться коректно работать...
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 24.05.2010, 06:22   #2
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

неужто никто не ответит((
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 24.05.2010, 11:14   #3
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

а чё отвечать утечка памяти... запустите ваше приложение и посмотрите как оно сжираёт все системные ресурсы.
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 24.05.2010, 12:56   #4
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

так не просто ж так оно их сжерает, значит где то нужно что то освобождать...
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 24.05.2010, 12:57   #5
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

так используй метод Free
_-Re@l-_ вне форума Ответить с цитированием
Старый 24.05.2010, 13:05   #6
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

так млин, что free то, к чему его применить?!
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 24.05.2010, 13:08   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

во первых по строке вашей освободите память, вроде там нужно StrDispose
во вторых вижу у вас лист(TList походу) с ним утечек нет?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.05.2010, 13:16   #8
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

Цитата:
во первых по строке вашей освободите память, вроде там нужно StrDispose
поподробнее пожалуста

Код:
во вторых вижу у вас лист(TList походу) с ним утечек нет?
если вы про List так это:

Код:
...
ListDir = record
   wnd: hWnd;
   Name: string;
   FullName: string;
   flag: boolean;
  end;
...
  List: array[1..128] of ListDir;
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Старый 24.05.2010, 13:24   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

StrDispose(P);
может вам проще на string перейти?
ибо это все старое

вот пример(p в нем это string)
Код:
  SetLength(p,256);
  SetLength(p,GetWindowText(h1,PChar(p),Length(p));
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 24.05.2010 в 14:03.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.05.2010, 13:52   #10
zumm
БохЪ
Форумчанин
 
Аватар для zumm
 
Регистрация: 30.09.2009
Сообщений: 724
По умолчанию

сделал StrDispose(P); вроде рабит...пока...а на строку...да уже лень переписывать))
В планах порабощение вселенной...
zumm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Out of memory... Klim Bassenger Microsoft Office Excel 9 17.01.2018 12:56
Memory Address's MelKiY_bad C++ Builder 10 07.05.2010 07:24
Memory Information 2def Помощь студентам 3 03.12.2009 14:50
Out of Memory ERROR Безбашик Общие вопросы по Java, Java SE, Kotlin 2 10.06.2009 11:37