![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача структуры с типом String [D7, XP]
Цукор5 © (2011-11-29 17:42:00)Имеется структура. Одно из полей этой структуры имеет тип 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-30 18:35:00) [1]
> Не, как раз разные сборки
Почему?
Германн (2011-11-30 01:36:00) [2]
> Германн © (30.11.11 01:19) [14]
>
>
> > if IsDebuggerPresent then
> >
>
> Это из другой оперы.
>
Это к
> _Юрий (29.11.11 22:48) [12]
>
>
Германн (2011-11-30 01:19:00) [3]
> if IsDebuggerPresent then
>
Это из другой оперы.
Ega23 (2011-11-29 22:51:00) [4]
> if IsDebuggerPresent then
Не, как раз разные сборки
_Юрий (2011-11-29 22:48:00) [5]
> Ega23 © (29.11.11 22:08) [10]
> {$IFDEF DEBUG}
> ReportMemoryLeaksOnShutdown := True;
> {$ENDIF}
if IsDebuggerPresent then
Jeer (2011-11-29 22:43:00) [6]На любителя.
Глобальную DebugHook не зря изобрели.
У меня всегда в проекте ( есть такой противный Init.pas ) живет isDebug для моих целей.
Ega23 (2011-11-29 22:08:00) [7]
> В третьих (c D2006):
>
> Воткнуть лучше в dpr вот тут:
>
> begin
> // add with hands
> ReportMemoryLeaksOnShutdown := DebugHook <> 0;
Тогда уж
{$IFDEF DEBUG}
ReportMemoryLeaksOnShutdown := True;
{$ENDIF}
Jeer (2011-11-29 21:21:00) [8]Во-первых:
- ReportMemoryLeak OnShutDown
Во-вторых:
- FastMM не включен в D7 по умолчанию.
В третьих (c D2006):
Воткнуть лучше в dpr вот тут:
begin
// add with hands
ReportMemoryLeaksOnShutdown := DebugHook <> 0;
//
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TMainForm, MainForm) ;
Application.Run;
end.
_Юрий (2011-11-29 20:48:00) [9]ReportMemoryLeakAtShutDown := True;
и вы получите сообщение на закрытии приложения в случае, если есть проблемы с утечками памяти
нонамэ (2011-11-29 19:48:00) [10]Все нормально. Dispose вызовет _FinalizeRecord, который в свою очередь, позаботится о строках, дин. массивах, вариантах и интерфесах.
Цукор5 (2011-11-29 18:00:00) [11]
> Необходимо описать Q
Q:PMyRecive;
Anatoly Podgoretsky (2011-11-29 17:53:00) [12]> Цукор5 (29.11.2011 17:42:00) [0]
Необходимо описать Q
Ega23 (2011-11-29 17:51:00) [13]
> Может имеет смысл дополнительно вызывать StrDispose для
> строк в структуре?
Не надо.
Код, вроде, нормальный.
Медвежонок Пятачок (2011-11-29 17:50:00) [14]Может имеет смысл дополнительно вызывать StrDispose для строк в структуре?
Тогда имеет смысл сначала использовать StrAlloc
Медвежонок Пятачок (2011-11-29 17:45:00) [15]хотя если New и контролировать время жизни, то все ок.
Медвежонок Пятачок (2011-11-29 17:44:00) [16]конечно неправильно.
так как постмесадж, то на момент обработки структура уже может умереть вместе с указателем на строку