Ошибка

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ошибка

Сообщение cot » 12.12.2022 14:58:39

Создал прогу Lazarus 2.0.12
На форме кнопка при ее нажатии клавиши выполняется функция (листинг функции внизу) случайного выбора 1 и 0 (страна или ее столица) если случайно выбран 1, то все работает, но если выбран 0, то возникает ошибка List index exceeds bounds (0).
форумчане подскажте в чем причина?


/////////////////////////////////////////////////////////////////////////////////
function TForm5.str_sto(f:string):string;//функция случайно выбранная страна или столица stringgrid1 form4
// c:integer;//глобальная переменная страна/столица}
{
для проверки
в поле Edit28 выводится страна или столица
в поле Edit29 выводится выбранное значение 1 или 0
}
begin
F:='1';
form4.Edit29.Text:='';
randomize;
c:=random(2);
form4.Edit29.Text:=inttostr(c);
if c=0 then form4.Edit28.Text:='страна';
if c=1 then form4.Edit28.Text:='столица';
if c=0 then result:='страна';
if c=1 then result:='столица';

end;
/////////////////////////////////////////////////////////////////////////////////
cot
незнакомец
 
Сообщения: 6
Зарегистрирован: 27.04.2022 16:52:35

Re: Ошибка

Сообщение iskander » 12.12.2022 16:18:10

cot писал(а):На форме кнопка при ее нажатии клавиши выполняется функция (листинг функции внизу) случайного выбора 1 и 0 (страна или ее столица) если случайно выбран 1, то все работает, но если выбран 0, то возникает ошибка List index exceeds bounds (0).
форумчане подскажте в чем причина?


/////////////////////////////////////////////////////////////////////////////////
function TForm5.str_sto(f:string):string;//функция случайно выбранная страна или столица stringgrid1 form4
// c:integer;//глобальная переменная страна/столица}

Можно предположить(без хрустального шара, увы, не обойтись), что где-то в этом самом stringgrid1 form4
iskander
энтузиаст
 
Сообщения: 606
Зарегистрирован: 08.01.2012 18:43:34

Re: Ошибка

Сообщение cot » 12.12.2022 16:38:48

stringgrid1 form4 - это комментарий для функции, столбцы из таблицы которые выбирает функция, я их вывел в поле Edit28
cot
незнакомец
 
Сообщения: 6
Зарегистрирован: 27.04.2022 16:52:35

Re: Ошибка

Сообщение iskander » 12.12.2022 18:15:40

В приведённом отрывке кода не видно ничего такого, что могло бы сгенерировать подобную ошибку, так что, увы, нужно больше кода, желательно компилируемый пример.
iskander
энтузиаст
 
Сообщения: 606
Зарегистрирован: 08.01.2012 18:43:34

Re: Ошибка

Сообщение Sharfik » 13.12.2022 14:23:59

Во время появления ошибки вызываем "Стек вызовов" и идем смотрим кто как вызывал. И по шагам повторяем, сверяя показания переменных. Но раз ошибка говорит что список за границей, значит надо смотреть там, где есть списки.
Аватара пользователя
Sharfik
энтузиаст
 
Сообщения: 791
Зарегистрирован: 20.07.2013 01:04:30

Re: Ошибка

Сообщение Shleps » 15.12.2022 11:59:17

Cудя по всему где-то есть пустой список и при обращении к его первому элементу (т.е. с индексом 0) всё вылетает.
Это может быть какой-нибудь графический элемент типа комбобокса, который забыли заполнить итемами.

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

Добавлено спустя 5 часов 45 минут 55 секунд:
и еще одна не то чтобы ошибка, но неправильность
randomize
должен вызываться один раз в начале программы, а не при каждом нажатии кнопки. соответственно ему место в обработчике onCreate или onShow

Добавлено спустя 4 минуты 32 секунды:
и еще: у функции есть параметр f. непонятно зачем, но есть.
он не обьявлен, как var, но ему что-то присваивается. это как?
Аватара пользователя
Shleps
постоялец
 
Сообщения: 194
Зарегистрирован: 14.06.2006 20:25:14


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 19

Рейтинг@Mail.ru