Ошибка

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

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

Ответить
cot
незнакомец
Сообщения: 6
Зарегистрирован: 27.04.2022 15:52:35

Ошибка

Сообщение cot »

Создал прогу 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;
/////////////////////////////////////////////////////////////////////////////////
iskander
энтузиаст
Сообщения: 630
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

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


/////////////////////////////////////////////////////////////////////////////////
function TForm5.str_sto(f:string):string;//функция случайно выбранная страна или столица stringgrid1 form4
// c:integer;//глобальная переменная страна/столица}
Можно предположить(без хрустального шара, увы, не обойтись), что где-то в этом самом stringgrid1 form4
cot
незнакомец
Сообщения: 6
Зарегистрирован: 27.04.2022 15:52:35

Сообщение cot »

stringgrid1 form4 - это комментарий для функции, столбцы из таблицы которые выбирает функция, я их вывел в поле Edit28
iskander
энтузиаст
Сообщения: 630
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

В приведённом отрывке кода не видно ничего такого, что могло бы сгенерировать подобную ошибку, так что, увы, нужно больше кода, желательно компилируемый пример.
Аватара пользователя
Sharfik
энтузиаст
Сообщения: 839
Зарегистрирован: 20.07.2013 01:04:30

Сообщение Sharfik »

Во время появления ошибки вызываем "Стек вызовов" и идем смотрим кто как вызывал. И по шагам повторяем, сверяя показания переменных. Но раз ошибка говорит что список за границей, значит надо смотреть там, где есть списки.
Аватара пользователя
Shleps
постоялец
Сообщения: 194
Зарегистрирован: 14.06.2006 20:25:14
Контактная информация:

Сообщение Shleps »

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

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

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

Добавлено спустя 4 минуты 32 секунды:
и еще: у функции есть параметр f. непонятно зачем, но есть.
он не обьявлен, как var, но ему что-то присваивается. это как?
Ответить