Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос мастерам Как объяснить следующие утечки памяти ? [D7]


Страницы:   1 2

Кто---то ©   (2004-11-28 01:48:00) 


    PObj1 = ^TObj1;
    TObj1 = record
      Name1 : string;
    end;

    PObj2 = ^TObj2;
    TObj2 = array[0..MaxInt shr 4] of TObj1;

    TObj3 = record
      Name2   : string;
      MyArray : PObj2;
    end;
...
var
 a1 : TObj3;
const
 cnt1 = 1;
begin

 a1.MyArray := AllocMem(cnt1 * SizeOf(TObj1));
 a1.Name2 := 'AAAAAAAAA'; // Эта строка утечек не вызывает.
 a1.MyArray[0].Name1 := '';      // С этой строкой утечек нет.
 a1.MyArray[0].Name1 := 'A';     // С этой строкой утечка = 12.
 a1.MyArray[0].Name1 := 'AA';    // С этой строкой утечка = 12.
 a1.MyArray[0].Name1 := 'AAA';   // С этой строкой утечка = 12.
 a1.MyArray[0].Name1 := 'AAAA';  // С этой строкой утечка = 16.
 a1.MyArray[0].Name1 := 'AAAAА'; // С этой строкой утечка = 16.
 FreeMem(a1.MyArray);


Почему 12 ? Почему 16 ? Чем объясняются эти цифры и почему ФриМем не освобождает правильно память ?


Германн   (2004-11-28 02:07:00) [21]

А ты думал, что строка занимает в памяти столько байт, сколько в ней символов?
Во-первых учти выравнивание. (во-первых, по скольку оно существенно как для Huge(Long)строк, так и для паскалевских.
Во-вторых учти, что Huge(Long)строки, помимо самого их содержания, включают в себя и некую другую информацию и FreeMem тут не годится. Почитай Help о Finalize procedure.


Andy BitOff   (2004-11-28 02:05:00) [22]

Это всеравно, что удалять гланды через, то место откуда ноги растут.


Sirakuz   (2004-11-28 01:59:00) [23]

Не понимаю, зачем ты тут динамически выделяешь память, у тебя же массив статический.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо