Динамические переменные указатели - не ладится!
3102
17
Вечер добрый!
Я по учебнику автора Глушакова С. В. Delphy 5.0 пытаюсь научиться работать с динамическими пер указателями.
кусочек проги:
var
p1, p2: ^integer;
type
mas = array[1..40] of integer;
p3 = ^mas;
begin

new(p2);

97 p3^:1::=69; {необходимо присвоить первому элементу массива знач 69}

p1^:=7;

dispose(p2);

и при компиляции по F9 результат:

[Error] Unit1.pas(97): '(' expected but '^' found

[Fatal Error] Project1.dpr(5): Could not compile used unit '..\Objrepos\Unit1.pas'

Все строки переписал из учебника и не могу понять где ошибка!?
Заранее благодарен.
dm_fish
Указателями давно не пользовался, но кажеться должно быть так:
p3(1):=69;
Как точно, смогу уточнить позже, Делфи у меня только дома :спок:
Сибиряк
Увы нет, я пробовал, так сказать методом научного тыка...

на команду типа:

97 p3(1):=69;

ответ:

[Error] Unit1.pas(97): Left side cannot be assigned to

...
Спасибо за желание помочь..
dm_fish
Юзай:

type
mas = array[1..40] of integer;
p3 = ^mas;

var
p1, p2: ^integer;
A:p3;
begin
new(p2);

A^:1::=69; {необходимо присвоить первому элементу массива знач 69}

p1^:=7;

dispose(p2);

Проверено, компилируеться :спок:
Сибиряк
Привет!
действительно компилируется, спасибо.
А у тебя при компиляции было сообщение:

[Warning] Unit1.pas(103): Variable 'p1' might not have been initialized
[Warning] Unit1.pas(101): Variable 'A' might not have been initialized

если я правильно перевёл, то получается: переменная возможно не была инициализирована!?
чего с этим делать?
dm_fish
Это просто предупреждение. Можно не обращать внимание :спок:
dm_fish
>Unit1.pas(103): Variable 'p1' might not have been initialized
Компилятор прав. p1 у Вас висит в воздухе, то есть это указатель неведомо куда. Сделав присвоение
p1^:=7;
Вы в неведомую ячейку памяти записали 7. Может, ничем плохом это не кончится, а может случиться все что угодно.
p1:^integer;
new(p1);
// Вот теперь Ваш p1 - адрес принадлежащий хипу (куче) Вашей программы и никому больше не мешает.
p1^:=7; // OK
Максимыч
p1^:=7;
Вы в неведомую ячейку памяти записали 7. Может, ничем плохом это не кончится, а может случиться все что угодно.
Ну положим что угодно не случится. Возникнет исключение Access Violation at address FFFFFFFF да и всего делов. :улыб:
craxx
Спасибо за подсказки!
А сообщение типа аксес виолэйшн... я видел в проге которую писал не я а по работе должен тестить и не знал от чего может быть.. теперь немного проясняется..возможно такое сообщение могло быть вызвано другими причинами, я не знаю, ну да это так мысли вслух.
Всем спасибо.
dm_fish
Это не единственная причина возникновения исключений. Их достаточно много и их источник бывает не так просто, как здесь, определить. Особенно при использовании "левых" компанентов, написаных не собственно ручно :спок:
Сибиряк
А левый компанент, это любой написанный несобственно ручно, если я правильно понимаю компаненты это в том числе, стандартные модули в делфи из которых строю свою программку?
не судите строго если вдруг чего нетак ляпнул..
dm_fish
Левый компонент - это компонент, взятый из источников, не заслуживающих доверия :улыб::спок:
craxx
Не всегда. Бывает, что про просто недостаточно описаны параметры компанента, либо коряво или совсем не обрабатываються исключения :спок:
Сибиряк
Тогда это уже не левый а просто кривой компонент.:улыб::спок:
Сибиряк
Всем:
Спасибо за ответы...:миг: