powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / String + Thread = Leak...
6 сообщений из 6, страница 1 из 1
String + Thread = Leak...
    #39503020
_Leaker_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте все!
Что-то я в шоке.
Написал копеечное многопоточное приложение.
Все работает, чинно - благородно. Думаю, надо проверить на утечки памяти.
подключил фастмм и офигел. он изматерился на все строковые (String) переменные в потоках.

Потоки запускаются примерно так:
Код: pascal
1.
2.
3.
4.
5.
6.
...
  if ThreadHandle > 0 then
    Exit;
  Stop := 0;
  ThreadHandle := BeginThread(nil, 0, @ThreadFunc, ThreadInfo, 0, ThreadId);
...


Ну и сама функция потока (убрал все лишнее):
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
function ThreadFunc(aParams: Pointer): Integer;
var
  Str    : String;
begin
  Result := 0;
  Str := StringOfChar('q', 10); // Матерится на утечку здесь...               *
//  Str := 'qqqqqqqqqq';        // А так - не матерится.                      *
  Sleep(100);                   // Типа упахались .                           *
//  Setlength(Str, 0);   // Если раскомментарить, то все рОвно. Нет утечки.   *
  EndThread(0);
end;


Народ, кто-нибудь может это объяснить? Че, теперь все строки очищать??? о_О

Delphi 7. FastMM4991.
...
Рейтинг: 0 / 0
String + Thread = Leak...
    #39503021
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наводящие вопросы:
1. Что делает EndThread?
2. В какой строчке кода освобождается строка Str?
3. Где происходит выделение памяти для 'qqqqqqqqqq'?



P.S. Для ленивых быдлокодеров:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
function RealThreadFunc(aParams: Pointer): Integer;
var
  Str    : String;
begin
  Result := 0;
  Str := StringOfChar('q', 10);
  Sleep(100);                  
end;

function ThreadFunc(aParams: Pointer): Integer;
begin
  Result := RealThreadFunc(aParams);
  EndThread(0);
end;



Или:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
function ThreadFunc(aParams: Pointer): Integer;
var
  Str    : String;
begin
  Result := 0;
  Str := StringOfChar('q', 10); 
  Sleep(100);    
end;
...
Рейтинг: 0 / 0
String + Thread = Leak...
    #39503023
_Leaker_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GunSmoker,
Спасибки.
Зыж Че обзываться-то. Я не волшебник, я только учусь (с). :)
...
Рейтинг: 0 / 0
String + Thread = Leak...
    #39503027
GunSmoker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это вы сами про себя подумали. А я не обзываюсь - я про тех, кто разбираться не хочет, а код готов лепить.
...
Рейтинг: 0 / 0
String + Thread = Leak...
    #39503366
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Leaker_
Код: pascal
1.
function ThreadFunc(aParams: Pointer): Integer;



stdcall где?..
...
Рейтинг: 0 / 0
String + Thread = Leak...
    #39503383
Bred eFeM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp stdcall где?..внутри BeginThread ))
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / String + Thread = Leak...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]