Динамические переменные указатели - не ладится!
3191
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
если я правильно перевёл, то получается: переменная возможно не была инициализирована!?
чего с этим делать?
Это просто предупреждение. Можно не обращать внимание
Сейчас читают
ПЛАТЯНОЙ ШКАФ (ПРОЧТЕНИЕ ПРАВИЛ ОБЯЗАТЕЛЬНО!!!) (часть 7)
348470
1000
лучший виниловый сайдинг
55658
87
Общий фонд (заявки, решения, отчеты) (часть 2)
1089918
942
>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