Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1321648202
Юрий
2011-11-19 00:30
2012.03.11
С днем рождения ! 19 ноября 2011 суббота


15-1319910376
KilkennyCat
2011-10-29 21:46
2012.03.11
налог на носители


6-1253185020
bvv
2009-09-17 14:57
2012.03.11
Проблема с потоками сканирования


15-1321628043
Dimka Maslov
2011-11-18 18:54
2012.03.11
Баг или фича


15-1321475403
Юрий
2011-11-17 00:30
2012.03.11
С днем рождения ! 17 ноября 2011 четверг





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский