6°C
завтра: 5°C
Погода в Перми
6°C
утром3°C
днем5°C
завтра5°C
Подробно
 63,79
+0.0046
Курс USD ЦБ РФна 24 апреля
63,7906
+0.0046
 71,75
+0.0243
Курс EUR ЦБ РФна 24 апреля
71,7453
+0.0243
PRM.Форум /Компьютеры Интернет Связь / Программирование /

Динамические переменные указатели - не ладится!

  • experienced

    Сообщений: 590

    Вечер добрый!
    Я по учебнику автора Глушакова С. В. 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'

    Все строки переписал из учебника и не могу понять где ошибка!?
    Заранее благодарен.

  • v.i.p.

    Сообщений: 13508

    Указателями давно не пользовался, но кажеться должно быть так:
    p3(1):=69;
    Как точно, смогу уточнить позже, Делфи у меня только дома :спок:

  • experienced

    Сообщений: 590

    Увы нет, я пробовал, так сказать методом научного тыка...

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

    97 p3(1):=69;

    ответ:

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

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

  • v.i.p.

    Сообщений: 13508

    Юзай:

    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);

    Проверено, компилируеться :спок:

  • experienced

    Сообщений: 590

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

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

    если я правильно перевёл, то получается: переменная возможно не была инициализирована!?
    чего с этим делать?

  • v.i.p.

    Сообщений: 13508

    Это просто предупреждение. Можно не обращать внимание :спок:

  • experienced

    Сообщений: 590

    Спасибо за инфу!:улыб:

  • Максимыч

    Анонимный пользователь

    >Unit1.pas(103): Variable 'p1' might not have been initialized
    Компилятор прав. p1 у Вас висит в воздухе, то есть это указатель неведомо куда. Сделав присвоение
    p1^:=7;
    Вы в неведомую ячейку памяти записали 7. Может, ничем плохом это не кончится, а может случиться все что угодно.
    p1:^integer;
    new(p1);
    // Вот теперь Ваш p1 - адрес принадлежащий хипу (куче) Вашей программы и никому больше не мешает.
    p1^:=7; // OK

  • v.i.p.

    Сообщений: 13508

    И то верно :live: :спок:

  • рыжий котэ

    Сообщений: 12083

    В ответ на: p1^:=7;
    Вы в неведомую ячейку памяти записали 7. Может, ничем плохом это не кончится, а может случиться все что угодно.
    Ну положим что угодно не случится. Возникнет исключение Access Violation at address FFFFFFFF да и всего делов. :улыб:

    Осторожнее с травой!
    Если хапнешь много дряни
    Увезут тебя с собой
    Злые инопланетяне

  • experienced

    Сообщений: 590

    Спасибо за подсказки!
    А сообщение типа аксес виолэйшн... я видел в проге которую писал не я а по работе должен тестить и не знал от чего может быть.. теперь немного проясняется..возможно такое сообщение могло быть вызвано другими причинами, я не знаю, ну да это так мысли вслух.
    Всем спасибо.

  • v.i.p.

    Сообщений: 13508

    Это не единственная причина возникновения исключений. Их достаточно много и их источник бывает не так просто, как здесь, определить. Особенно при использовании "левых" компанентов, написаных не собственно ручно :спок:

  • experienced

    Сообщений: 590

    А левый компанент, это любой написанный несобственно ручно, если я правильно понимаю компаненты это в том числе, стандартные модули в делфи из которых строю свою программку?
    не судите строго если вдруг чего нетак ляпнул..

  • рыжий котэ

    Сообщений: 12083

    Левый компонент - это компонент, взятый из источников, не заслуживающих доверия :улыб::спок:

    Осторожнее с травой!
    Если хапнешь много дряни
    Увезут тебя с собой
    Злые инопланетяне

  • v.i.p.

    Сообщений: 13508

    Не всегда. Бывает, что про просто недостаточно описаны параметры компанента, либо коряво или совсем не обрабатываються исключения :спок:

  • рыжий котэ

    Сообщений: 12083

    Тогда это уже не левый а просто кривой компонент.:улыб::спок:

    Осторожнее с травой!
    Если хапнешь много дряни
    Увезут тебя с собой
    Злые инопланетяне

  • v.i.p.

    Сообщений: 13508

    Тоже верно :ха-ха!: :спок:

  • experienced

    Сообщений: 590

    Всем:
    Спасибо за ответы...:миг:

Записей на странице:

Перейти в форум

Модератор: