![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с памятью правильно или нет? [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]
> код проверьте пожайлусто
и на какой предмет проверять ?