Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];

Вниз

Heap   Найти похожие ветки 

 
Heap   (2006-02-09 16:41) [0]

Подскажите, как после выделения памяти с ней работать. Допустим в память надо запистать 100 random байт, сохранить их в файл, а 37й показать на экране. Это пример просто для того чтобы понять как работать с памятью


 
Джо ©   (2006-02-09 16:47) [1]

Вопрос слишком широк. Нужно читать литературу.

Вот пример работы с дин. памятью "для почина":

type
 PMyInformation = ^TMyInformation;

 TMyInformation = record
   A,B: Integer;
 end;
var
 MyInfo: PMyInformation;
begin
 // выдылели необходимый блок памяти в куче
 // указатель на него сохранили в переменной MyInfo
 GetMem (MyInfo, SizeOf(TMyInformation));
 try
   // Работаем с информацией через указатель на нее
   MyInfo^.A := 10;
   MyInfo^.B := 20;
 finally
   // освобождаем выделенную память
   FreeMem (MyInfo);
 end;
end;


 
Heap   (2006-02-09 17:05) [2]

Это не подходит. Мне необходима память для свободной манипуляции с ней.
Записываемые и читаемые данные имеют разный размер. Нечто вроде
Stream.Position
Stream.Write
Stream.Read
Как это реализовать?


 
Gero ©   (2006-02-09 17:07) [3]

> Нечто вроде
> Stream.Position
> Stream.Write
> Stream.Read
> Как это реализовать?

Чем не устраивает?


 
Джо ©   (2006-02-09 17:07) [4]

> [2] Heap   (09.02.06 17:05)
> Это не подходит. Мне необходима память для свободной манипуляции
> с ней.

Тогда, просьба объяснить — что есть "свободные манипуляции с ней"?


 
Heap   (2006-02-09 17:14) [5]


> Чем не устраивает?


> Gero ©   (09.02.06 17:07) [3]


Не использую VCL.


> Джо ©   (09.02.06 17:07) [4]


> Тогда, просьба объяснить — что есть "свободные манипуляции
> с ней"?

Необходимо иметь указатель, и относительно него смещаться и читать/писать значения.


 
Джо ©   (2006-02-09 17:18) [6]

> [5] Heap   (09.02.06 17:14)
> Необходимо иметь указатель, и относительно него смещаться
> и читать/писать значения.

Так за чем дело стало?
Используй указатель типа PByte. А еще проще — динамические массивы.


 
Heap   (2006-02-09 17:26) [7]


> Джо ©   (09.02.06 17:18) [6]


> Используй указатель типа PByte. А еще проще — динамические
> массивы.


Я же говорю мне необходимо записывать данные разного размера.

Т.е. пробовал
p:^byte;
a:array of byte;
...
p:=@a[0];
p^:=$abcd;
...
ругается на несовместимость типов, или чет типа того. Оно и понятно нельзя в байт записать два байта. А потом уже в хелпе откопал:
Do not apply the dereference operator (^) to a dynamic-array variable or pass it to the New or Dispose procedure.
Поэтому нельзя использовать для инициализации никаких типов.


 
Джо ©   (2006-02-09 17:31) [8]

Используй move.


 
Heap   (2006-02-09 17:43) [9]

А смещения?


 
umbra ©   (2006-02-09 20:06) [10]

procedure test;
var
p: PChar;
m: string;
i, res: integer;
begin
 i := 100;
 Getmem(p, 100);
 strlcopy(p + 2, @i, sizeof(integer));
 res := integer((p+2)^);
 m := IntToStr(res);
 ShowMessage(m);
 FreeMem(p);
end;



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

Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.037 c
2-1139750132
Volf_555
2006-02-12 16:15
2006.02.26
Программа сидит в трэи. Как отловить сообщение без таймера?


2-1139302759
Flex_
2006-02-07 11:59
2006.02.26
Что за класс TTreeNode и с чем его едят?


4-1134017008
Strech
2005-12-08 07:43
2006.02.26
Незащищенные секции программы


15-1138887290
Yanis
2006-02-02 16:34
2006.02.26
Кто-нибудь пользуется?


8-1126982161
ArtemESC
2005-09-17 22:36
2006.02.26
Как реализовать освящение





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский