var
val:pointer;
//--------------------------------------
GetMem(value, sizeOf(val^));
value^:=val^;
нетипизированные указатели
з.ы. у меня это выглядит так:
Код:
а ещё это не работает =).
В общем случае присваивание можно сделать с помощью Move, один из её параметров — количество байтов, которые нужно скопировать.
щас потестю
Код:
program pointersTest;
var
pInteger: pointer;
value: integer;
begin
GetMem(pInteger, sizeOf(Integer));
move(2, pInteger, sizeOf(Integer));
move(pInteger^, value, sizeOf(Integer));
writeln(value);
FreeMem(pInteger, sizeOf(Integer));
readln();
end.
var
pInteger: pointer;
value: integer;
begin
GetMem(pInteger, sizeOf(Integer));
move(2, pInteger, sizeOf(Integer));
move(pInteger^, value, sizeOf(Integer));
writeln(value);
FreeMem(pInteger, sizeOf(Integer));
readln();
end.
output:
Код:
Runtime error 216 at $00401814
$00401814
$00406550
$00401814
$00406550
Код:
program pointersTest;
var
pInteger: pointer;
value: integer;
begin
GetMem(pInteger, sizeOf(Integer));
move(integer(2), pInteger, sizeOf(Integer));
value := integer(pInteger);
writeln(value);
FreeMem(pInteger, sizeOf(Integer));
readln();
end.
var
pInteger: pointer;
value: integer;
begin
GetMem(pInteger, sizeOf(Integer));
move(integer(2), pInteger, sizeOf(Integer));
value := integer(pInteger);
writeln(value);
FreeMem(pInteger, sizeOf(Integer));
readln();
end.
output:
Код:
2
Runtime error 216 at $004046BA
$004046BA
$004013E9
$00406550
Runtime error 216 at $004046BA
$004046BA
$004013E9
$00406550
я так понял, вся проблема в FreeMem. Без него ошибки не возникает, ток выглядит всё это некрасиво.
Цитата: Злобный Кыс
move(integer(2), pInteger, sizeOf(Integer));
Move требуются не указатели, а типа сами разыменованные данные. Во–первых, pInteger^, во–вторых, 2 лучше присвоить в отдельную переменную.
там просто опечатка. блин, исправил, стало работать. спасибо