Форум: "Начинающим";
Текущий архив: 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