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

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

Работа с памятью правильно или нет? [D6, Win2k, WinXP]


2ksion ©   (2005-08-17 15:15:00) 

Вот код проверьте пожайлусто

procedure TForm1.Button4Click(Sender: TObject);
var
 p:Pointer;
 v,d,g:integer;
 s,m: PChar;
begin
s:='проверка';
v:=lstrlen(s);
d:=v+4;
GetMem(p,d);
move(v,p^,4);
move(s,IncPtr(p,4)^,v);
ShowMessage(inttostr(Sizeof(p)));
move(p^,g,4);
ShowMessage(inttostr(g));
move(IncPtr(p,4)^,m,v);
ShowMessage(strpas(m));
FreeMem(p);
end;

function IncPtr(APointer: pointer; AHowMuch: cardinal = 1): pointer;
begin
//тут наращиваеться адресс Pointer
 Result := Ptr(cardinal(APointer) + AHowMuch);
end;


Defunct   (2005-08-18 01:50:00) [1]

> ShowMessage(inttostr(Sizeof(p)));

Это задумывалось для вывода на экран количества выделенной памяти?


Anatoly Podgoretsky   (2005-08-17 20:30:00) [2]

2ksion ©   (17.08.05 15:27) [2]
Неправильно


Digitman   (2005-08-17 17:07:00) [3]

и вообще - галиматья полнаяв приведенном коде.


Digitman   (2005-08-17 17:03:00) [4]


> d:=v+4;


это - какое-то шаманское таинство, мне неведомое.


Digitman   (2005-08-17 17:01:00) [5]

смотрим в прототип (system.pas):

procedure Move(const Source; var Dest; Count: Integer);

делаем умозаключения :

1. move(v,p^,4); - неверно : v не является адресом источника (Source)

2. move(s,IncPtr(p,4)^,v); - неверно : s не является адресом источника

а дальше и рассматривать нет резона.


2ksion   (2005-08-17 15:27:00) [6]

на предмет правильности с move


Digitman   (2005-08-17 15:17:00) [7]


> код проверьте пожайлусто


и на какой предмет проверять ?


Наверх

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