Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

нетипизированные указатели

23K
16 мая 2009 года
Злобный Кыс
40 / / 10.01.2008
каким образом по нетипизированному указателю можно присвоить значение по другому нетипизированному указателю?

з.ы. у меня это выглядит так:
 
Код:
var
  val:pointer;
//--------------------------------------
GetMem(value, sizeOf(val^));
value^:=val^;

а ещё это не работает =).
44K
16 мая 2009 года
OCTAGRAM
30 / / 11.03.2009
Указатель нетипизированный, компилятор не может знать, как сделать присваивание.

В общем случае присваивание можно сделать с помощью Move, один из её параметров — количество байтов, которые нужно скопировать.
23K
16 мая 2009 года
Злобный Кыс
40 / / 10.01.2008
щас потестю
23K
17 мая 2009 года
Злобный Кыс
40 / / 10.01.2008
где меня глючит?

Код:
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.


output:
 
Код:
Runtime error 216 at $00401814
  $00401814
  $00406550
23K
17 мая 2009 года
Злобный Кыс
40 / / 10.01.2008
немного полистал мануалы и пришёл к этому
Код:
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.


output:
 
Код:
2
Runtime error 216 at $004046BA
  $004046BA
  $004013E9
  $00406550


я так понял, вся проблема в FreeMem. Без него ошибки не возникает, ток выглядит всё это некрасиво.
44K
17 мая 2009 года
OCTAGRAM
30 / / 11.03.2009
Цитата: Злобный Кыс
move(integer(2), pInteger, sizeOf(Integer));



Move требуются не указатели, а типа сами разыменованные данные. Во–первых, pInteger^, во–вторых, 2 лучше присвоить в отдельную переменную.

23K
22 мая 2009 года
Злобный Кыс
40 / / 10.01.2008
там просто опечатка. блин, исправил, стало работать. спасибо
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог