![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Где у меня происходит утечка памяти? (менеджер задач так
RV © (2002-09-17 10:05:00)говорит. Колонка память все время растет. А можть это нормально?
begin
Result := "";
Flags := PRINTER_ENUM_LOCAL;
Count := 0;
EnumPrinters(Flags, nil, 2, nil, 0, Count, NumInfo);
if Count = 0 then Exit;
GetMem(Buffer, Count);
try
if not EnumPrinters(Flags, nil, 2, PByte(Buffer), Count, Count, NumInfo) then
Exit;
PrinterInfo := Buffer;
stroka:="";
try
for I := 0 to NumInfo - 1 do
with PPrinterInfo2(PrinterInfo)^ do
begin
OpenPrinter(pPrinterName,PrinterHandle,nil);
if EnumJobs(PrinterHandle,
0,
cJobs,
2,
@ZadachiPrintera,
SizeOf(ZadachiPrintera),
ByteRez,
StructCount)
then if StructCount>0
then for j := 0 to StructCount-1 do begin
//???????????????????
if (SystemTimeToDateTime(ZadachiPrintera[j].Submitted)>CZad)
then PriemZadanie;
end;
Inc(PrinterInfo, sizeof(TPrinterInfo2));
end;
Result := Stroka;
finally
//!!!!!!!!
end;
finally
FreeMem(Buffer, Count);
end;
end;
никак не пойму...
спасибо всем ответившим!
RV (2002-09-17 15:29:00) [1]да, ClosePrinter то, что нужно было дописать
всем спасибо!
zavdim (2002-09-17 11:02:00) [2]http://www.automatedqa.com/- тута и водится MemProof
nikkie (2002-09-17 10:59:00) [3]OpenPrinter есть, а ClosePrinter нет
btw, не понятно, что такое ZadachiPrintera. MSDN говорит:
To determine the required buffer size, call EnumJobs with cbBuf set to zero.
Anatoly Podgoretsky (2002-09-17 10:56:00) [4]RV © (17.09.02 10:19)
С этим порядок, по Exit выходит на finally
а вот как с тем, что бы на каждый OpenPrinter делать ClosePrinter
RV (2002-09-17 10:41:00) [5]Внук © (17.09.02 10:37)
а где его взять?
Внук (2002-09-17 10:37:00) [6]Очень рекомендую MemProof для борьбы с утечками. "Мужики пили - хвалили" :))
RV (2002-09-17 10:19:00) [7]
GetMem(Buffer, Count);
try
if not EnumPrinters(Flags, nil, 2, PByte(Buffer), Count, Count, NumInfo) then
Exit;
есть подозрение что тут, но и
GetMem(Buffer, Count);
try
if not EnumPrinters(Flags, nil, 2, PByte(Buffer), Count, Count, NumInfo) then
FreeMem(Buffer, Count);
Exit;
то же Колонка память все время растет