Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.22;
Скачать: CL | DM;

Вниз

Работа с указателями   Найти похожие ветки 

 
Novice   (2007-04-03 12:11) [0]

type TSomeClass = class
      ...
      FSomeField : Pointer;
...

TSomeClass.SomeProc(Param : integer);
var i : integer;
begin
i := Param;
GetMem(FSomeField, SizeOf(Integer));
FSomeField := @i;
end;

Подскажите, каким образом можно освободить память, занимаемую переменной i, на которую ссылается указатель FSomeField ?


 
Reindeer Moss Eater ©   (2007-04-03 12:14) [1]

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

Никаким. Память эта будет освобождена сама при выходе i из зоны видимости.


 
Ega23 ©   (2007-04-03 12:15) [2]

Ты вообще понимаешь, что ты написал? Ты в курсе, что тут у тебя бомба заложена (и нифиговая)?


 
clickmaker ©   (2007-04-03 12:19) [3]

чё за бессмыслица?
нахрена под integer отводить указатель?


 
ЮЮ ©   (2007-04-03 12:19) [4]

Память, занимаемая i, и так освободиться при выходе из метода SomeProc. и FSomeField в результате будет указывать в "никуда". А выделенная GetMem попросту утеряна.


 
Novice   (2007-04-03 12:23) [5]

В том и дело, что сам толком еще не разобрался в указателях. Только учусь.

Пока я дошел вот до чего. Если я перепишу эту процедуру следующим образом:

TSomeClass.SomeProc(var Param : integer);
begin
GetMem(FSomeField, SizeOf(Integer));
FSomeField := @Param;
end;

То указатель FSomeField будет ссылаться именно на переменную Param. Следовательно, стоит мне только где-нибудь в коде изменить значение этой переменной, то в любой структуре, использующей указатель на эту переменную, все соответственно изменится. Я хочу получить следующее:
В классе TSomeClass объявить одну переменную, которой можно было бы присваивать значения разных типов (integer, real, word, shortstring.... etc...).
Поскольку каждый тип занимает разное кол-во байт памяти, мне нужно динамически изменять размер этой переменной.

Если кто сталкивался с подобной проблемой, прошу помочь. Объясните мне, как стоит поступить в данном случае.


 
Reindeer Moss Eater ©   (2007-04-03 12:26) [6]

Объясните мне, как стоит поступить в данном случае.

Надо лечь поспать и все пройдет


 
clickmaker ©   (2007-04-03 12:27) [7]


> как стоит поступить в данном случае

var V: Variant;



Страницы: 1 вся ветка

Текущий архив: 2007.04.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.044 c
15-1175115194
Gero
2007-03-29 00:53
2007.04.22
Хвастаюсь


2-1175682244
Officeman
2007-04-04 14:24
2007.04.22
Цветные делений в ProgressBar1


2-1175170243
Alex_C
2007-03-29 16:10
2007.04.22
Странное поведение формы из DLL


1-1172477752
Kav
2007-02-26 11:15
2007.04.22
Delphi 10 и Delphi 7 совместимость


2-1175240923
Gloomer
2007-03-30 11:48
2007.04.22
Указать в ADOQuery путь к файлу