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

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

Heap


Heap ©   (2006-02-09 16:41:00) 

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


umbra   (2006-02-09 20:06:00) [1]

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;


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

А смещения?


Джо   (2006-02-09 17:31:00) [3]

Используй move.


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


> Джо ©   (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:18:00) [5]

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

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


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


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


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


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


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


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

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


Gero   (2006-02-09 17:07:00) [7]

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

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


Джо   (2006-02-09 17:07:00) [8]

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

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


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

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


Джо   (2006-02-09 16:47:00) [10]

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

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

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;


Наверх

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