Динамические переменные указатели - не ладится!
3181
17
Вечер добрый!
Я по учебнику автора Глушакова С. В. Delphy 5.0 пытаюсь научиться работать с динамическими пер указателями.
кусочек проги:
var
p1, p2: ^integer;
type
mas = array[1..40] of integer;
p3 = ^mas;
begin
new(p2);
97 p3^:=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'
Все строки переписал из учебника и не могу понять где ошибка!?
Заранее благодарен.
Я по учебнику автора Глушакова С. В. Delphy 5.0 пытаюсь научиться работать с динамическими пер указателями.
кусочек проги:
var
p1, p2: ^integer;
type
mas = array[1..40] of integer;
p3 = ^mas;
begin
new(p2);
97 p3^:=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'
Все строки переписал из учебника и не могу понять где ошибка!?
Заранее благодарен.
Указателями давно не пользовался, но кажеться должно быть так:
p3(1):=69;
Как точно, смогу уточнить позже, Делфи у меня только дома
p3(1):=69;
Как точно, смогу уточнить позже, Делфи у меня только дома
Увы нет, я пробовал, так сказать методом научного тыка...
на команду типа:
97 p3(1):=69;
ответ:
[Error] Unit1.pas(97): Left side cannot be assigned to
...
Спасибо за желание помочь..
на команду типа:
97 p3(1):=69;
ответ:
[Error] Unit1.pas(97): Left side cannot be assigned to
...
Спасибо за желание помочь..
Юзай:
type
mas = array[1..40] of integer;
p3 = ^mas;
var
p1, p2: ^integer;
A:p3;
begin
new(p2);
A^:=69; {необходимо присвоить первому элементу массива знач 69}
p1^:=7;
dispose(p2);
Проверено, компилируеться
type
mas = array[1..40] of integer;
p3 = ^mas;
var
p1, p2: ^integer;
A:p3;
begin
new(p2);
A^:=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
если я правильно перевёл, то получается: переменная возможно не была инициализирована!?
чего с этим делать?
действительно компилируется, спасибо.
А у тебя при компиляции было сообщение:
[Warning] Unit1.pas(103): Variable 'p1' might not have been initialized
[Warning] Unit1.pas(101): Variable 'A' might not have been initialized
если я правильно перевёл, то получается: переменная возможно не была инициализирована!?
чего с этим делать?
Это просто предупреждение. Можно не обращать внимание
Сейчас читают
Обо всем понемногу (часть 4)
200812
1000
Слить охлаждающую жижу из блока 5AFE
4675
9
как продать распил
13636
66
>Unit1.pas(103): Variable 'p1' might not have been initialized
Компилятор прав. p1 у Вас висит в воздухе, то есть это указатель неведомо куда. Сделав присвоение
p1^:=7;
Вы в неведомую ячейку памяти записали 7. Может, ничем плохом это не кончится, а может случиться все что угодно.
p1:^integer;
new(p1);
// Вот теперь Ваш p1 - адрес принадлежащий хипу (куче) Вашей программы и никому больше не мешает.
p1^:=7; // OK
Компилятор прав. p1 у Вас висит в воздухе, то есть это указатель неведомо куда. Сделав присвоение
p1^:=7;
Вы в неведомую ячейку памяти записали 7. Может, ничем плохом это не кончится, а может случиться все что угодно.
p1:^integer;
new(p1);
// Вот теперь Ваш p1 - адрес принадлежащий хипу (куче) Вашей программы и никому больше не мешает.
p1^:=7; // OK
p1^:=7;Ну положим что угодно не случится. Возникнет исключение Access Violation at address FFFFFFFF да и всего делов.
Вы в неведомую ячейку памяти записали 7. Может, ничем плохом это не кончится, а может случиться все что угодно.
Спасибо за подсказки!
А сообщение типа аксес виолэйшн... я видел в проге которую писал не я а по работе должен тестить и не знал от чего может быть.. теперь немного проясняется..возможно такое сообщение могло быть вызвано другими причинами, я не знаю, ну да это так мысли вслух.
Всем спасибо.
А сообщение типа аксес виолэйшн... я видел в проге которую писал не я а по работе должен тестить и не знал от чего может быть.. теперь немного проясняется..возможно такое сообщение могло быть вызвано другими причинами, я не знаю, ну да это так мысли вслух.
Всем спасибо.
Это не единственная причина возникновения исключений. Их достаточно много и их источник бывает не так просто, как здесь, определить. Особенно при использовании "левых" компанентов, написаных не собственно ручно
А левый компанент, это любой написанный несобственно ручно, если я правильно понимаю компаненты это в том числе, стандартные модули в делфи из которых строю свою программку?
не судите строго если вдруг чего нетак ляпнул..
не судите строго если вдруг чего нетак ляпнул..
Левый компонент - это компонент, взятый из источников, не заслуживающих доверия
Не всегда. Бывает, что про просто недостаточно описаны параметры компанента, либо коряво или совсем не обрабатываються исключения
Тогда это уже не левый а просто кривой компонент.
ТОП 5
4