Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 662

/ вопрос открыт /

Здравствуйте! У меня возникла проблема с реализацией одной программы "молекулами". Постоянно выдает ошибку связанную с памятью,а исправить не как не могу.
программа должна работать так:нажимаем на пуск и начинают двигаться 30 шейпов с рандомной скоростью,при соприкосновении друг с другом и стенок "сосуда" отталкиваться на v_x:=-V_x,v_у:=-V_у.Компоненты создавать я не хотел,а только присвоить к массиву шейпы.
В программе
shape:array[1..3] of TShape-массив шейпов
a,V,V_x,V_y-скорость перемещения по горизонтали и вертикали
Когда с одним шейпом делал все получалось,а тут:mad:
Понять свою ошибку тоже не могу, объясните кто может? И если не трудно подскажите поподробнее как сделать?
x,y-новые координаты.

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

Casper_gold Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Casper_gold (статус: Посетитель)
Вопрос отправлен: 19 апреля 2009, 20:17
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Quark

Здравствуйте, Casper_gold!

у вас объявлен массив

shape:array[1..3] of TShape;

А где заполнение массива данными? Обращение к не инициализированному массиву - вот и ошибка памяти.
Сделал небольшой пример.
В прикрепленной процедуре использован ваш модуль, переменные FindShape:TShape и shape:array[1..3] of TShape; - глобальные.
Ставь этот цикл например при загрузке формы (событие onCreate) - и всё! :)
Проверил - работает. Но появляется проблема - шейпы объединяются вместе и улетают за край формы, так что решите и эту проблему :) Причина - в инициализации переменных при нажатии кнопки. Шейпы будут налагаться друг на друга.

Не корректно высказывание - "Компоненты создавать я не хотел,а только присвоить к массиву шейпы. " Либо вы используете компонент TShape из палитры компонентов, либо создаёте его как объект вручную, с прописыванием всех параметров. Второй вариант - для мазохиста в данном случае :)

Совет - не ленитесь пользоваться отладчиком и брекпойнтами - сразу ясно - где глюк.... И учите объектно-ориентированное программирование ;)

Приложение:
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. var
  3. i : integer;
  4. begin
  5. for i := 1 to 3 do
  6. begin
  7. FindShape:=FindComponent('Shape'+inttostr(i));
  8. shape[i] := FindShape as TShape;
  9. end;
  10. end;


Ответ отправил: Quark (статус: 1-ый класс)
Время отправки: 19 апреля 2009, 21:49
Оценка за ответ: 5

Комментарий к оценке: спасибо большое! Да я не ленюсь,я просто только учусь не очень понимаю как отладчик и брекпойнт работает. Еще раз спасибо!

Мини-форум вопроса

Мини-форум пуст.

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

Версия движка: 2.6+ (26.01.2011)
Текущее время: 23 февраля 2020, 02:21
Выполнено за 1.02 сек.
Рейтинг@Mail.ru