Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.156.156] |
|
Сообщ.
#1
,
|
|
|
Подскажите пожалуйста, где ошибка в программе, при нажатии на кнопку расчетов вылезает ошибка access violation at address in module rtl60 bpl
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); } } } Добавлено а список такой: Ведьмак Анджей Сопковский АСТ 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 Исторические романы |
Сообщ.
#2
,
|
|
|
Цитата Maxim97 @ Вполне может быть, что здесь:Подскажите пожалуйста, где ошибка в программе Цитата Maxim97 @ Надо бы нестрогое неравенство заменить на строгое:for(int j = 0; j <= count ; j++){ for(int j = 0; j < count ; j++){ |
Сообщ.
#3
,
|
|
|
Цитата Славян @ Надо бы нестрогое неравенство заменить на строгое: Так у него count = RowCount-1; Скорее всего проблема в том, что он обращается к несуществующим элементам StringGrid2. Да и вообще, прежде чем спрашивать, автор пробовал подебажить? Пройдись под отладчиком и посмотри где упало. |
Сообщ.
#4
,
|
|
|
Цитата Славян @ спасибо! из файла стал читать без ошибки А не могли бы подсказать, почему я ввожу новую строчку в StringGrid, но он ее в расчетах не учитывает, ну точнее если новый жанр там даю |
Сообщ.
#5
,
|
|
|
Я конечно давно уже на билдере не писал, и позабыл как там стринггриду добавлять колонки и рядки, но ты уверен что именно таким образом их странет реально больше(т.е. создадутся)?
Цитата Maxim97 @ StringGrid2->RowCount = 2; StringGrid2->ColCount = 4; Мне казалось там должны быть методы, аля StringGrid2->AddCol, AddRow. |
Сообщ.
#6
,
|
|
|
Цитата KILLER @ ну они создаются |
Сообщ.
#7
,
|
|
|
Цитата KILLER @ Не, там универсализма столько накручено, что и равенства хватает. Мне казалось там должны быть методы, аля StringGrid2->AddCol, AddRow. Цитата Maxim97 @ Быть может когда вы её вводите, то вы её только там вводите, а надо ещё содержимое и в свою внутреннюю переменную books[...] засунуть. А не могли бы подсказать, почему я ввожу новую строчку в StringGrid, но он ее в расчетах не учитывает, ну точнее если новый жанр там даю |
Сообщ.
#8
,
|
|
|
Цитата Славян @ так он же вроде при расчете их все просто с колонок и строчек "переписывает" или нет? |
Сообщ.
#9
,
|
|
|
Цитата Maxim97 @ Ну у вас просто бардак в оформлении кода (модераторы намекнут и/или поправят, посему сходу не видно. А видно, что при начале цикла так он же вроде при расчете их все просто с колонок и строчек "переписывает" или нет? Цитата Maxim97 @ начинается считывание данных с переменных books[...], кои же не определены. for(int i = 0; i < count ; i++){ g = books[i].genre; y = books[i].year; |
Сообщ.
#10
,
|
|
|
Цитата Славян @ они просто определены в программе ранее, это фрагмент кода |
Сообщ.
#11
,
|
|
|
M Используем тег [code] для добавления текста программы в пост! Устное предупреждение! Читаем правила! |
Сообщ.
#12
,
|
|
|
Цитата Maxim97 @ Определены то определены, но при вводе новой строки данные же вы не записываете в books[...], а надо! И тогда и будет учёт в расчёте, коли я всё правильно понял. они просто определены в программе ранее |