утечка памяти ?

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Ответить
Аватара пользователя
Attid
долгожитель
Сообщения: 2589
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

утечка памяти ?

Сообщение Attid »

случайно накнулся на утечку памяти в консольном приложении, правда у меня старый фпц 2,4,0
но не ожидал что со строковой переменной

в основном потоке создаются потоки

Код: Выделить всё

    repeat
        //code  code code
        BeginThread(@IncomeThread,@vClientSocket);
    until false;     


ну и функция проста

Код: Выделить всё

function IncomeThread(Parameter : Pointer) : Integer;
var s : string;
begin
  Result := 0;
  s := IntToStr(Random(10));
  addLog(s);
  //s := '';     
  EndThread;
end;


собственно пока не добавил в конце обнуление "s" потребление памяти возрастало, хотя я и был уверен что в паскале этого делать не надо :roll:

вопрос больше риторический, но все же кто не прав ? :?:
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

Ты принудительно завершаешь поток, не дав выполниться коду неявного освобождения памяти в конце процедуры. Естественно, при этом память будет течь.
Alex2013
долгожитель
Сообщения: 3237
Зарегистрирован: 03.04.2013 11:59:44

Сообщение Alex2013 »

Как вариант можно выделять и освобождать память самостоятельно
или если строки гарантировано не длинные использовать тип ShortString;

Зы Кстати интересно можно ли использовать объявление типа S:String[1024] ; ?
Linus
новенький
Сообщения: 47
Зарегистрирован: 11.01.2013 22:01:28

Сообщение Linus »

[Текст сообщения стерт. Возникшая проблема уже решена] :mrgreen:

fpc 2.6.0 lazarus 0.9.30.4 (stable) Debian wheezy amd64
Ответить