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

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

AnsiExtractQuotedStr(PChar(str), ...)


RWolf ©   (2009-10-21 11:24:00) 

Функция AnsiExtractQuotedStr принимает аргумент PChar и меняет его (указатель, а не строку) на выходе. Не может ли произойти утечки памяти при передаче ей конструкции PChar(str), где str:string?
т.е. где контролируется, что было выделено под копию строки str столько-то памяти по такому-то адресу, которую нужно освободить при возврате из функции?


Anatoly Podgoretsky   (2009-10-21 14:04:00) [1]

> RWolf  (21.10.2009 13:19:06)  [6]

Именно так, AnsiString полностью совместимы с PChar


RWolf   (2009-10-21 13:19:00) [2]


> Anatoly Podgoretsky

то есть, за паскалевской строкой в обязательном порядке резервируется нулевой символ?


Anatoly Podgoretsky   (2009-10-21 13:03:00) [3]

p:=PChar
Никакого отношения к механизму управления строка не имеет, это автономный указатель.


Медвежонок Пятачок   (2009-10-21 12:27:00) [4]

Была строка (string).
Память освободится когда срока выйдет из зоны видимости.
Соответственно все пчары на нее протухнут автоматом.
Будь их хоть пятсот на одну и ту же строку


Медвежонок Пятачок   (2009-10-21 12:24:00) [5]

Допустим, я делаю копию строки: p:=PChar(str);

Здесь никакой копии не делается вообще.
Память была выдена под string и все.
И она по прежнему контролируется компилятором.


RWolf   (2009-10-21 12:12:00) [6]

да, верно — так передать синтаксис не позволит. Переформулирую. Допустим, я делаю копию строки: p:=PChar(str); и этот указатель передаю в функцию. Память под копию была выделена автоматически, и я ожидаю, что она так же автоматически и освободится, когда компилятор решит, что она больше не нужна. Не сломается ли этот механизм в случае, когда значение указателя изменяется в теле вызываемой функции?


Медвежонок Пятачок   (2009-10-21 11:53:00) [7]

при передаче ей конструкции PChar(str),

Такая передача не прокатит.
А утечка будет только если строка изначально создавалась через PChar и перед вызовом не сохранен оригинальный указатель на нее


Наверх

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