C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Где ошибка
mirk
  Отправлено: 14.07.2003, 10:13


Ученик-кочегар

Группа: Участник
Сообщений: 10



Объясните плиз где ошибка: При работе указанного ниже кода добавление в базу проходит нормально но при закрытие программы выходит следующая ощибка: Project brak.exe raised exception class EInvalidPointer with message 'invalid pointer operation'.

CODE

TRadioButton *my_button[30];

my_button[0] = rbVppo1;
my_button[1] = rbVppo2;
my_button[2] = rbVppo3;
my_button[3] = rbVppo4;
my_button[4] = rbVppo5;
my_button[5] = rbVppo6;
my_button[6] = rbVppo7;
my_button[7] = rbStat1;
my_button[8] = rbStat2;
my_button[9] = rbStat3;
my_button[10] = rbStat4;
my_button[11] = rbStat5;
my_button[12] = rbStat6;
my_button[13] = rbNat1;
my_button[14] = rbNat2;
my_button[15] = rbNat3;
my_button[16] = rbNat4;
my_button[17] = rbNat5;
my_button[18] = rbNat6;
my_button[19] = rbNat7;
my_button[20] = rbDnvc1;
my_button[21] = rbDnvc2;
my_button[22] = rbDnvc3;
my_button[23] = rbDnvc4;
my_button[24] = rbDnvc5;
my_button[25] = rbDnvc6;
my_button[26] = rbDnvc7;
my_button[27] = rbDnvc8;
my_button[28] = rbDnvc9;
my_button[29] = rbDnvc10;
my_button[30] = rbDnvc11;

for(int i = 0; i <= 6; i ++)
{
 if(my_button[i]->Checked)
  {
  tE->FieldByName("Perobr")->AsString=my_button[i]->Caption;
  tE->FieldByName("Perobr_n")->AsString=IntToStr(i);
  }
}
for(int i = 13; i <=19; i ++)
{
 if (my_button[i]->Checked)
  {
  tE->FieldByName("Nacio")->AsString=my_button[i]->Caption;
  tE->FieldByName("Nacio_n")->AsString=IntToStr(i);
  }
}
for(int i = 7; i <= 12; i ++)
{
 if (my_button[i]->Checked)
 {
 tE->FieldByName("Status")->AsString=IntToStr(i);
 }
}
for(int i = 20; i <=30; i ++)
{
 if(my_button[i]->Checked)
  {
   tE->FieldByName("Lon")->AsString=IntToStr(i);
  }
        }
Asher
Отправлено: 14.07.2003, 11:20


Мастер участка

Группа: Модератор
Сообщений: 550



Интересно, как при TRadioButton *my_button[30]; должна рассматриваться эта строка — my_button[30] = rbDnvc11;
и соответственно в последнем цикле при i = 30 доступ к my_button[30]->Checked должен приводить к ошибке работы указателя.
mirk
Отправлено: 14.07.2003, 12:07


Ученик-кочегар

Группа: Участник
Сообщений: 10



заменил *my_button[30] на *my_button[31], все заработало.

Сенк большое. Но все равно я не совсем понял .*my_button[30] всего 30, радиобатонов тоже 30, так зачем же ставить *my_button[31]?
Asher
Отправлено: 14.07.2003, 12:36


Мастер участка

Группа: Модератор
Сообщений: 550



[x] x — количество элементов массива, в твоём случае все-таки 31, т.к. индексы элементов с 0 до 30, итого 31 biggrin.gif
mirk
Отправлено: 14.07.2003, 12:42


Ученик-кочегар

Группа: Участник
Сообщений: 10



QUOTE (Asher @ 14/07/2003, 13:38)
[x] x — количество элементов массива, в твоём случае все-таки 31, т.к. индексы элементов с 0 до 30, итого 31  biggrin.gif

Понял, с ручника снимаюсь

Вернуться в Работа с базами данных в C++Builder