Форум: "Начинающим";
Текущий архив: 2012.03.11;
Скачать: [xml.tar.bz2];
ВнизПередача структуры с типом String Найти похожие ветки
← →
Цукор5 (2011-11-29 17:42) [0]Имеется структура. Одно из полей этой структуры имеет тип String.
TMyRecive = packed record
ClientSocket: DWord;
hText: String;
end;
PMyRecive = ^TMyRecive;
Подскажите, правильно ли я передаю структуру? Может имеет смысл дополнительно вызывать StrDispose для строк в структуре?...
New(Q);
Q^.ClientSocket:=ClientSocket;
Q^.hText:=Text;
PostMessage(Handle, WM_USER+60, wParam(Q),0);
...
...
procedure TForm1.MyTCPReciveBytes(var Msg: TMessage);
var Q:PMyRecive;
begin
Q:=PMyRecive(Msg.wParam);
...
Dispose(Q);
end;
← →
Медвежонок Пятачок © (2011-11-29 17:44) [1]конечно неправильно.
так как постмесадж, то на момент обработки структура уже может умереть вместе с указателем на строку
← →
Медвежонок Пятачок © (2011-11-29 17:45) [2]хотя если New и контролировать время жизни, то все ок.
← →
Медвежонок Пятачок © (2011-11-29 17:50) [3]Может имеет смысл дополнительно вызывать StrDispose для строк в структуре?
Тогда имеет смысл сначала использовать StrAlloc
← →
Ega23 © (2011-11-29 17:51) [4]
> Может имеет смысл дополнительно вызывать StrDispose для
> строк в структуре?
Не надо.
Код, вроде, нормальный.
← →
Anatoly Podgoretsky © (2011-11-29 17:53) [5]> Цукор5 (29.11.2011 17:42:00) [0]
Необходимо описать Q
← →
Цукор5 (2011-11-29 18:00) [6]
> Необходимо описать Q
Q:PMyRecive;
← →
нонамэ (2011-11-29 19:48) [7]Все нормально. Dispose вызовет _FinalizeRecord, который в свою очередь, позаботится о строках, дин. массивах, вариантах и интерфесах.
← →
_Юрий (2011-11-29 20:48) [8]ReportMemoryLeakAtShutDown := True;
и вы получите сообщение на закрытии приложения в случае, если есть проблемы с утечками памяти
← →
Jeer © (2011-11-29 21:21) [9]Во-первых:
- ReportMemoryLeakOnShutDown
Во-вторых:
- FastMM не включен в D7 по умолчанию.
В третьих (c D2006):
Воткнуть лучше в dpr вот тут:
begin
// add with hands
ReportMemoryLeaksOnShutdown := DebugHook <> 0;
//
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TMainForm, MainForm) ;
Application.Run;
end.
← →
Ega23 © (2011-11-29 22:08) [10]
> В третьих (c D2006):
>
> Воткнуть лучше в dpr вот тут:
>
> begin
> // add with hands
> ReportMemoryLeaksOnShutdown := DebugHook <> 0;
Тогда уж{$IFDEF DEBUG}
ReportMemoryLeaksOnShutdown := True;
{$ENDIF}
← →
Jeer © (2011-11-29 22:43) [11]На любителя.
Глобальную DebugHook не зря изобрели.
У меня всегда в проекте ( есть такой противный Init.pas ) живет isDebug для моих целей.
← →
_Юрий (2011-11-29 22:48) [12]
> Ega23 © (29.11.11 22:08) [10]
> {$IFDEF DEBUG}
> ReportMemoryLeaksOnShutdown := True;
> {$ENDIF}
if IsDebuggerPresent then
← →
Ega23 © (2011-11-29 22:51) [13]
> if IsDebuggerPresent then
Не, как раз разные сборки
← →
Германн © (2011-11-30 01:19) [14]
> if IsDebuggerPresent then
>
Это из другой оперы.
← →
Германн © (2011-11-30 01:36) [15]
> Германн © (30.11.11 01:19) [14]
>
>
> > if IsDebuggerPresent then
> >
>
> Это из другой оперы.
>
Это к
> _Юрий (29.11.11 22:48) [12]
>
>
← →
_Юрий (2011-11-30 18:35) [16]
> Не, как раз разные сборки
Почему?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2012.03.11;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c