Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249

Access violation при проверке нажат ли клавиша (C++ Builder 6)

09.09.2015, 20:10. Показов 1222. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "main.h"
#include <conio.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
Tmainform *mainform;
//---------------------------------------------------------------------------
__fastcall Tmainform::Tmainform(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall Tmainform::butOkClick(TObject *Sender)
{
        CheckValue();
        size = se->Value;
        cellsize = image->Height / size;
        area.resize(size+2);
        for (int i = 0; i < area.size(); i++)
        {
                area[i].resize(area.size());
                for (int j = 0; j < area.size(); j++)
                        area[i][j] = 0;
        }
        area[size/2 + 1][size/2 + 1] = 10;
        Draw();
        srand(time(NULL));
}
//---------------------------------------------------------------------------
void Tmainform::Draw()
{
        TRect cell;
        for (int i = 1; i <= size; i++)
                for (int j = 1; j <= size; j++)
                {
                        if (area[i][j] > 4)
                                image->Canvas->Brush->Color = (TColor)RGB(255, 48, 48);
                        else if (area[i][j] > 0)
                                image->Canvas->Brush->Color = (TColor)RGB(255, 215, 0);
                        else
                                image->Canvas->Brush->Color = (TColor)RGB(192, 255, 62);
                        cell = TRect((j-1)*cellsize, (i-1)*cellsize, j*cellsize, i*cellsize);
                        image->Canvas->FillRect(cell);
                }
}
//---------------------------------------------------------------------------
void Tmainform::CheckValue()
{
        if (se->Text.Length() == 0)
                se->Text = 11;
        else
        {
                if (se->Value % 2 == 0)
                        se->Value = se->Value-1;
                if (se->Value == 1)
                        se->Value = 11;
        }
}
//---------------------------------------------------------------------------
 
void __fastcall Tmainform::btnStepClick(TObject *Sender)
{
        bool end;
        for (int i = 1; i <= size; i++)
                for (int j = 1; j <= size; j++)
                {
                        if (area[i][j] > 0)
                                area[i][j]--;
                        if (area[i][j] == 0)
                        {
                                end = false;
                                for (int ii = -1; ii <= 1 && !end; ii++)
                                        for (int jj = -1; jj <= 1 && !end; jj++)
                                                if (!(ii == 0 && jj == 0) && area[i+ii][j+jj] > 4 && area[i+ii][j+jj] < 11 && rand() % 2 == 0)
                                                {
                                                        area[i][j] = 11;
                                                        end = true;
                                                }
                        }
                }
        for (int i = 1; i <= size; i++)
                for (int j = 1; j <= size; j++)
                        if (area[i][j] == 11)
                                area[i][j] = 10;
        Draw();
}
//---------------------------------------------------------------------------
 
 
 
void __fastcall Tmainform::btnAutoClick(TObject *Sender)
{
        ShowMessage("Для остановки просмотра нажмите на любую клавишу!");
        while (!kbhit())
        {
                btnStepClick(Sender);
                Sleep(100);
        }
}
//---------------------------------------------------------------------------
Ошибка происходит в строке 101. До написания этой функции все было верно. В чем проблема?
Миниатюры
Access violation при проверке нажат ли клавиша (C++ Builder 6)  
Вложения
Тип файла: rar Lichen.rar (405.5 Кб, 0 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.09.2015, 20:10
Ответы с готовыми решениями:

Ошибка с++ builder 6.0 Access Violation
Добрый день ребята. У меня такая проблема, запускаю проект любой в с++ builder 6.0 у меня сразу выходит ошибка. Повторно щелкаю не закрывая...

C++ builder xe7 access violation
Здравствуйте. Помогите разобраться... В C++ builder ошибка access violation, а в gcc segmentation fault В чем прикол??? typedef...

'access violation at 0x00588ae1: read of address 0x000000b0'. В Builder XE2
Что то не понял почему вылезла вот эта ошибка в релиз проекте: First chance exception at $00588AE1. Exception class $C0000005 with...

8
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
09.09.2015, 21:05  [ТС]
По идее должна быть какая-то проблема из-за Sleep, ибо надо либо держать кнопку нажатой, или вероятно не сработает остановка. Но с Access Violation все равно непонятно.

Добавлено через 50 минут
актуально
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33372 / 21498 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
09.09.2015, 21:07
Лучший ответ Сообщение было отмечено MayaNash как решение

Решение

kbhit в оконном приложении? Не, так не пойдет. Используй OnKeyDown формы для отлова нажатия клавиши, и изменяй там какой-нибудь глобальный флажок, а уж по этому флажку - цикл.
1
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
09.09.2015, 21:13  [ТС]
volvo, понятненько... А что тогда использовать?
Сделаю пожалуй вообще без возможности остановки, пусть останавливается когда матрица обнулится. Но все же, что тут надо было бы использовать?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33372 / 21498 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
09.09.2015, 21:14
Я выше написал, что нужно было использовать
0
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
09.09.2015, 21:40  [ТС]
volvo, а, ага, не перезагрузила страничку
Точно, спасибо

Добавлено через 23 минуты
volvo, не работает Пока не отрабатывается эта функция, ничего не может произойти
0
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
09.09.2015, 21:41  [ТС]
Иногда начинается такое вот тупиковое состояние, и из него определенно надо выходить принудительно
Миниатюры
Access violation при проверке нажат ли клавиша (C++ Builder 6)  
Вложения
Тип файла: rar Lichen.rar (403.9 Кб, 2 просмотров)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33372 / 21498 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
09.09.2015, 23:43
Лучший ответ Сообщение было отмечено MayaNash как решение

Решение

Керра,
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall Tmainform::btnAutoClick(TObject *Sender)
{
        keydown = false;
        while (!Healthy() && !keydown)
        {
                btnStepClick(Sender);
                image->Refresh();
                Application->ProcessMessages(); // < --- Раз
                Sleep(200);
        }
}
, а два - это KeyPreview для формы надо было включить, если этого не сделать, то нажатия клавиш будут попадать в активный контрол, а после нажатия на кнопку Auto - это и будет эта самая кнопка. Включение KeyPreview будет посылать нажатия клавиш именно форме, туда, где ты их ловишь...

Зачем нужен вызов ProcessMessages, думаю, объяснять не нужно?
1
 Аватар для MayaNash
1296 / 470 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
10.09.2015, 08:40  [ТС]
volvo, понятно, благодарю

Добавлено через 2 минуты
О, сработало))
Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.09.2015, 08:40
Помогаю со студенческими работами здесь

Project raised exception class eaccessviolation with message 'access violation at address Ошибка Builder 6
Здравствуйте, суть программы - некая информационно-поисковая система &quot;Ветеринарная лечебница&quot;. При добавлении нового клиента вылезает...

Сайт CodeWars при проверке решения выдаёт ошибку, при проверке в VisualStudio ошибки нет
Задача написать метод,который будет проверять порядок круглых скобок. Написал код, проверил в Visual Studio, всё нормально. ...

При переносе на другой комп. возникает Access Violation при попытке открытия ClientDataSet
XE-8. При переносе на другой комп. возникает Access Violation при попытке открытия ClientDataSet, связанного с ADOQuery. База данных...

Access violation при вызове конструктора
Здравствуйте! У меня при вызове конструктора возникает ошибка. Access violation at adress 004C6463 in module 'Project1.exe'. Write of...

Access Violation при работе потока
var Stream:TStringStream; //поток List1: TStringList; // для загрузки из потока begin try ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru