На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> Картотека , Вылезает ошибка
    Подскажите пожалуйста, где ошибка в программе, при нажатии на кнопку расчетов вылезает ошибка access violation at address in module rtl60 bpl

    ExpandedWrap disabled
      void __fastcall TForm1::Button5Click(TObject *Sender)
      {
              int count = StringGrid1->RowCount-1;
       
              StringGrid2->RowCount = 2;
              StringGrid2->ColCount = 4;
              StringGrid2->Visible = true;
              StringGrid1->Visible = false;
              StringGrid2->Cells[0][0] = "Год";
              StringGrid2->ColWidths[0] = 105;
              StringGrid2->Cells[1][0] = "Жанр";
              StringGrid2->ColWidths[1] = 205;
              StringGrid2->Cells[2][0] = "Количество";
              StringGrid2->ColWidths[2] = 105;
              StringGrid2->Cells[3][0] = "Ср. Кол. Страниц";
              StringGrid2->ColWidths[3] = 205;
       
       
              AnsiString g, _g, y, _y;
              int pages, n;
       
              for(int i = 0; i < count ; i++){
                      g = books[i].genre;
                      y = books[i].year;
                      pages = 0;
                      n = 0;
       
                      for(int j = 0; j <= count ; j++){
                              _g = books[j].genre;;
                              _y = books[j].year;
                              if((g == _g) && (y == _y) )
                              {
                                      pages += books[i].pageCount;
                                      n ++;
                              }
                      }
                      if(i >= 2) {
                              bool flag = false;
                              for(int k = 0; k < StringGrid2->RowCount; k++){
                                      if ((g == StringGrid2->Cells[1][k] ) && (y == StringGrid2->Cells[0][k])) flag = true;
                              }
                              if(!flag){
                                      StringGrid2->RowCount ++;
                                      StringGrid2->Cells[0][i+1] = y;
                                      StringGrid2->Cells[1][i+1] = g;
                                      StringGrid2->Cells[2][i+1] = n;
                                      StringGrid2->Cells[3][i+1] = IntToStr(pages/n);
                              }
       
       
                      }
                      else{
                              StringGrid2->Cells[0][i+1] = y;
                              StringGrid2->Cells[1][i+1] = g;
                              StringGrid2->Cells[2][i+1] = n;
                              StringGrid2->Cells[3][i+1] = IntToStr(pages/n);
                      }
              }
       
      }

    Добавлено
    а список такой:
    ExpandedWrap disabled
      Ведьмак
      Анджей Сопковский
      АСТ
      2014
      600
      170х240
      Фантастика
      The Tales of Beedle the Bard
      Джоан Кэтлин Роулинг
      Азбука-Аттикус
      2015
      128
      170х215
      Фэнтези для детей
      Сто лет одиночества
      Габриэль Гарсиа Маркес
      АСТ
      2015
      544
      76х100
      Классическая и современная проза
      После 3х уже поздно
      Масару Ибука
      Азбука
      1992
      78
      130х200
      Детская психология
      Белая королева
      Филиппа Грегори
      АСТ
      2015
      100
      170х240
      Исторические романы
      Гарри Поттер и Тайная комната
      Джоан Кэтлин Роулинг
      АСТ
      2010
      480
      130х200
      Фэнтези для детей
      Гарри Поттер и Филосовский камень
      Джоан Кэтлин Роулинг
      АСТ
      2010
      480
      130х200
      Фэнтези для детей
      Огненный перст 2
      Борис Акунин
      АСТ
      2015
      382
      170х240
      Исторические романы
      После всего
      Масару Кибадзу
      Азбука
      1992
      95
      120х200
      Детская психология
      Огненный перст
      Борис Акунин
      АСТ
      2015
      115
      170х240
      Исторические романы
    Сообщение отредактировано: Qraizer -
      Цитата Maxim97 @
      Подскажите пожалуйста, где ошибка в программе
      Вполне может быть, что здесь:
      Цитата Maxim97 @
      for(int j = 0; j <= count ; j++){
      Надо бы нестрогое неравенство заменить на строгое:
      ExpandedWrap disabled
        for(int j = 0; j < count ; j++){
        Цитата Славян @
        Надо бы нестрогое неравенство заменить на строгое:

        Так у него count = RowCount-1;

        Скорее всего проблема в том, что он обращается к несуществующим элементам StringGrid2.
        Да и вообще, прежде чем спрашивать, автор пробовал подебажить? Пройдись под отладчиком и посмотри где упало.
          Цитата Славян @

          спасибо! из файла стал читать без ошибки
          А не могли бы подсказать, почему я ввожу новую строчку в StringGrid, но он ее в расчетах не учитывает, ну точнее если новый жанр там даю
            Я конечно давно уже на билдере не писал, и позабыл как там стринггриду добавлять колонки и рядки, но ты уверен что именно таким образом их странет реально больше(т.е. создадутся)?
            Цитата Maxim97 @
            StringGrid2->RowCount = 2;
            StringGrid2->ColCount = 4;


            Мне казалось там должны быть методы, аля StringGrid2->AddCol, AddRow.
              Цитата KILLER @

              ну они создаются
                Цитата KILLER @
                Мне казалось там должны быть методы, аля StringGrid2->AddCol, AddRow.
                Не, там универсализма столько накручено, что и равенства хватает. :)
                Цитата Maxim97 @
                А не могли бы подсказать, почему я ввожу новую строчку в StringGrid, но он ее в расчетах не учитывает, ну точнее если новый жанр там даю
                Быть может когда вы её вводите, то вы её только там вводите, а надо ещё содержимое и в свою внутреннюю переменную books[...] засунуть. ;)
                  Цитата Славян @

                  так он же вроде при расчете их все просто с колонок и строчек "переписывает" или нет?
                    Цитата Maxim97 @
                    так он же вроде при расчете их все просто с колонок и строчек "переписывает" или нет?
                    Ну у вас просто бардак в оформлении кода (модераторы намекнут и/или поправят, посему сходу не видно. А видно, что при начале цикла
                    Цитата Maxim97 @
                    ExpandedWrap disabled
                      for(int i = 0; i < count ; i++){
                                      g = books[i].genre;
                                      y = books[i].year;
                    начинается считывание данных с переменных books[...], кои же не определены.
                      Цитата Славян @

                      они просто определены в программе ранее, это фрагмент кода
                        M
                        Используем тег [code] для добавления текста программы в пост! Устное предупреждение! Читаем правила!
                          Цитата Maxim97 @
                          они просто определены в программе ранее
                          Определены то определены, но при вводе новой строки данные же вы не записываете в books[...], а надо! И тогда и будет учёт в расчёте, коли я всё правильно понял. :oops:
                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script execution time: 0,0559 ]   [ 17 queries used ]   [ Generated: 25.04.24, 10:34 GMT ]