Форум: "Начинающим";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
ВнизРабота с указателями Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.041 c