Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Содержимое указателя


Автор: lnix 10.4.2013, 11:10
Всем доброго времени суток!
Хотел спросить, как просмотреть содержимое памяти по адресу в указателе?
Есть стандартные средства?
Заранее благодарен.

Автор: kami 10.4.2013, 12:05
Цитата(lnix @  10.4.2013,  11:10 Найти цитируемый пост)
как просмотреть содержимое памяти по адресу

Что подразумевается под "посмотреть"?

Автор: lnix 10.4.2013, 12:53
Цитата(kami @ 10.4.2013,  12:05)
Цитата(lnix @  10.4.2013,  11:10 Найти цитируемый пост)
как просмотреть содержимое памяти по адресу

Что подразумевается под "посмотреть"?

по адресу указателя находится сложная структура данных нужно посмотреть значения данных расположенных по адресу в указателе.

Автор: kami 10.4.2013, 13:19
Цитата(lnix @  10.4.2013,  12:53 Найти цитируемый пост)
по адресу указателя находится сложная структура данных 

Если есть описание структуры:
Код

type
  TStruct = record
    Foo: integer;
    Foo1: Double
    ...
  end;
  PStruct = ^TStruct;

var
  myStruct: PStruct;
begin
  myStruct = myPointer;
  ShowMessage(IntToStr(myStruct.Foo));


Если нет и нужно посмотреть бинарные значения:
Код

var
  aStr: AnsiString;
begin
  SetLength(aStr, 100);
  Move(myPointer^, aStr[1], 100); 
  ShowMessage(aStr); // или - преобразовать в hex-вид, а потом выводить в строку


Вроде, как-то так (Delphi не под рукой smile  ).

Автор: lnix 10.4.2013, 13:48
Понятно, я думал может есть какие готовые средства в отладчике, типа, навел мышку на переменную а она вывела содержимое по адресу в указателе, а то умаялся прям.

Автор: Чучмек 10.4.2013, 14:03
В d7  наводишь на разыменованный указатель.
Или наводишь,нажимаешь правую кнопку, выбираешь   Debug->Evaluate/Modify->Inspect

Добавлено через 5 минут и 19 секунд
В новых версиях delphi наводишь на указатель, в "подсказке" наводишь на крестик возле имени переменной.

Автор: Beltar 10.4.2013, 14:09
Если указатель типизированный, то именно структуру на которую он указывает и покажет, если написать в окне watch p^, ну или навести курсор на "крышу" в исходном тексте.

Код

myStruct = myPointer;


Это что? Где выделение памяти под структуру через new? Кстати, может лучше класс использовать и забыть о прямой работе с указателями?

Автор: Чучмек 10.4.2013, 14:11
Цитата(Чучмек @  10.4.2013,  14:03 Найти цитируемый пост)
Или наводишь,нажимаешь правую кнопку, выбираешь   Debug->Evaluate/Modify->Inspect

Или сразу Debug->Inspect

Добавлено через 1 минуту и 52 секунды
Цитата(Beltar @  10.4.2013,  14:09 Найти цитируемый пост)
Это что? Где выделение памяти под структуру через new? 


Цитата(kami @  10.4.2013,  13:19 Найти цитируемый пост)
Вроде, как-то так (Delphi не под рукой smile  ).


Добавлено через 7 минут и 1 секунду
Beltar, kami имел в виду, что указатель myPointer (тип Pointer) уже указывает на конкретную область памяти

Автор: kami 10.4.2013, 15:31
Цитата(Чучмек @  10.4.2013,  14:11 Найти цитируемый пост)
Beltar, kami имел в виду, что указатель myPointer (тип Pointer) уже указывает на конкретную область памяти

+1 smile 

Цитата(lnix @  10.4.2013,  13:48 Найти цитируемый пост)
может есть какие готовые средства в отладчике, типа, навел мышку на переменную а она вывела содержимое по адресу в указателе,

Вот сразу дал бы полный ответ на вопрос "Что подразумевается под "посмотреть"?" - и получил бы нужный ответ, без уходов в сторону.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)