Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2012, 11:13   #1
lexflax
Пользователь
 
Регистрация: 12.04.2011
Сообщений: 74
Сообщение в чем ошибка? не могу понять...

информация организованна в структуру фамилия дата время. Хеш функция возвращает хеш фамилии тоесть складывает первую вторую и последнюю букву фамилии и остаток от деления на 101 возвращает. Есть строковый массив в него записывается вся эта структура... записывается в индекс, индекс это значение которое возвращает хеш функция допустим если вернуло 48 то запись будет в массив FAM[48]= Иванов. Но массив двумерный так как человек может посещать в один и тот же день несколько раз только с разным временем, и так как фамилия одна и та же то при совпадении записывается в тот же индекс но уже подругому вот так допустим Fam[48][1]=Иванов 12.01.2012 13 00 FAM[48][2]=Иванов 12.01.2012 14 00. Программа запускается но когда ввожу фамилию и жму добавить выдает вот такую ошибку "First chance exception at $75A6D36F. Exception class EAccessViolation with message 'Access violation at address 5000BA92 in module 'rtl140.bpl'. Write of address 00405F1C'. Process Project1.exe (79936)" и ниче не записывается в чем ошибка посмотрите код что не так делаю? почему такая ошибка возникает?
Код:
struct man
{
                AnsiString fio; // фамилия
                AnsiString date;  // дата
                AnsiString time;  // время
                int HECH; // шифр
 
} m[1000];
        AnsiString FAM[100][100];//массив строк в котором значение хеш функции это индекс массива куда записывается инфа о человеке
int C = 0;
int k=0;
 
int __fastcall TForm1::HF(char *key) // функция хеширование возвращает значение типа int
{
  int len = strlen(key), hashf = 0;
 
  // если длина ключа равна 0 или 1, возвратить key[0].
  // иначе сложить первый и последний символ
  if (len <= 1)
        hashf = key[0];
  else
        hashf = key[0] + key[1]+ key[len-1]; //складывает первый второй и последний символ
 
  return hashf % 101;
}
void __fastcall TForm1::Button1Click(TObject *Sender)// функция добавление нового человека
{
                if (FIO1->Text == "")
                                ShowMessage("Введите Ф.И.О!");
                else
                {
                                C = (db->Lines->Count/5);
                                AnsiString Temp;
                                m[C].fio = FIO1->Text;// запись в структуру фамилии
                                m[C].date = DateTimePicker1->Date.DateString(); // запись в структуру даты
                                m[C].time = DateTimePicker2->Time.TimeString();// запись в структуру время
                                Temp =m[C].fio;//присвоить фамилию
                                char *exp = Temp.c_str();
                                m[C].HECH=HF(exp); // присвоить хеш по фамилии
                                if (FAM[m[C].HECH][k].Length()==0) {// проверяем пуст ли тот элемент куда хотим записать человека
                                FAM[m[C].HECH][k]= m[C].fio +" " + m[C].date+ " " + m[C].time;}
                                else {k=k+1; FAM[m[C].HECH][k]= m[C].fio +" " + m[C].date+ " " + m[C].time;}//запись в елемент массива фам+дата+время
                                Spisok->Lines->Add("Ф.И.О: " + m[C].fio);  // вывод в список фамилии
                                Spisok->Lines->Add("Дата: " + m[C].date);  // вывод в список даты
                                Spisok->Lines->Add("Время: " + m[C].time); // вывод в список времени
                                Spisok->Lines->Add("=================================");
                                db->Lines->Add(m[C].fio);// добавление в db ифну из фио
                                db->Lines->Add(m[C].date);// добавление в db инфу из date
                                db->Lines->Add(m[C].time);// добавление в db инфу из time
                                db->Lines->Add (IntToStr(m[C].HECH)); // добавление в db инфу из шифра
                                db->Lines->Add (FAM[m[C].HECH][k]);// добавление в db инфу строкового массива в котором фам+дата+время
                                // добавление в db шифра
                                Rec->Caption = db->Lines->Count/5;//подчет количества записей
                                db->Lines->SaveToFile("List\\db.txt");//сохранение информации db в файл db.txt
 
                                FIO1->Clear();// очистка поля FIO1
                }
}

Последний раз редактировалось ACE Valery; 29.01.2012 в 02:26.
lexflax вне форума Ответить с цитированием
Старый 28.01.2012, 15:35   #2
microbit
Форумчанин
 
Аватар для microbit
 
Регистрация: 26.09.2011
Сообщений: 176
По умолчанию

построчно пройдите отладчиком и выясните где срабатывает исключение.
да и k вы не обнуляете
microbit вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу понять, в чем ошибка???File not found semechKO Паскаль, Turbo Pascal, PascalABC.NET 28 26.01.2012 19:42
Ошибка в коде не могу понять в чем Sylar9 Общие вопросы C/C++ 17 04.01.2012 19:45
Си. Не могу понять в чем ошибка Gerbera Помощь студентам 2 12.07.2011 19:11
Не могу понять в чем ошибка.... Blonde Помощь студентам 0 21.05.2011 14:19
Не могу понять, в чем ошибка FlashProStar Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 01.12.2010 12:20