Главная страница
    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
3-1135933859
ANB
2005-12-30 12:10
2006.02.26
Оптимальный способо генерации ID (Оракл)


2-1138118946
Алексей Петухов
2006-01-24 19:09
2006.02.26
Снова OLE


3-1135838346
mss
2005-12-29 09:39
2006.02.26
Ошибка в Interbase


2-1139152598
Alex_Korn
2006-02-05 18:16
2006.02.26
Сохранение TStrings в PByte


2-1139265169
Ани
2006-02-07 01:32
2006.02.26
Как работать с ani-курсорами?





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