Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.056 c
15-1174588113
JohnKorsh
2007-03-22 21:28
2007.04.22
Как из файла *.msg извлечь приложение?


15-1174917004
Rule
2007-03-26 17:50
2007.04.22
подскажите где и как копать по поводу управления WiFi подключения


3-1170237223
mak-shatura
2007-01-31 12:53
2007.04.22
индексы в mdb


3-1169972469
a1x
2007-01-28 11:21
2007.04.22
Vista + ADOX_TLB


10-1131727900
Георгий
2005-11-11 19:51
2007.04.22
Delphi+Excel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский