Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.03.11;
Скачать: CL | DM;

Вниз

Передача структуры с типом 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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.009 c
2-1322641073
_qwerty_
2011-11-30 12:17
2012.03.11
работа с bookmark


15-1321834443
иксик
2011-11-21 04:14
2012.03.11
А вот вы говорите автоваз


15-1321561802
Юрий
2011-11-18 00:30
2012.03.11
С днем рождения ! 18 ноября 2011 пятница


15-1321899084
Rouse_
2011-11-21 22:11
2012.03.11
Напомните плз автора Парадокса


2-1322594941
Jacksotnik
2011-11-29 23:29
2012.03.11
Помогите с отчетом