Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Аноним
5 / 5 / 4
Регистрация: 15.12.2013
Сообщений: 149
1

Ошибка Access violation

23.09.2015, 18:42. Показов 1063. Ответов 4
Метки нет (Все метки)

Здравствуйте. Не получается в таймере прорисовывать клетки. При старте таймера - выскакивает ежесекундно эта ошибка(скриншот прилагается).

Код:
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <stdlib.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Life.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
const int scope = 10;
const int x0 = 1;
const int y0 = 1;
const int wight = 47;
const int height = 29;
int age = 0;
int field[height][wight];
 
void CleanField()
{
    for(int i = 0; i < height; i++)
        for(int j = 0; j < wight; j++)
            field[height][wight] = 0;
 
}
 
void DrawCell(TCanvas *canvas, int x, int y)
{
    canvas->Pen->Color = clGreen;
    canvas->Rectangle(x0+(x-1)*scope, y0+(y-1)*scope, x0+x*scope-1, y0+y*scope-1);
    field[x-1][y-1] = 1;
}
 
void DrawCellFromArray(TCanvas *canvas, int i, int j)
{
    canvas->Pen->Color = clGreen;
    if(field[i][j] == 1)
        canvas->Rectangle(x0+(i-1)*scope, y0+(j-1)*scope, x0+i*scope-1, y0+j*scope-1);
}
 
void DeleteCell(TCanvas *canvas, int x, int y)
{
    canvas->Pen->Color = clMenu;
    canvas->Rectangle(x0+(x-1)*scope, y0+(y-1)*scope, x0+x*scope-1, y0+y*scope-1);
    field[x-1][y-1] = 0;
}
 
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
PaintBox1->Canvas->Pen->Color = clGray;
PaintBox1->Canvas->MoveTo(0, 0);
for(int i = 0; i < PaintBox1->Width; i+=scope)
{
    PaintBox1->Canvas->LineTo(i, PaintBox1->Height);
    PaintBox1->Canvas->MoveTo(i+scope, 0);
}
PaintBox1->Canvas->MoveTo(0, 0);
for(int i = 0; i < PaintBox1->Height; i+=scope)
{
    PaintBox1->Canvas->LineTo(PaintBox1->Width, i);
    PaintBox1->Canvas->MoveTo(0, i+scope);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::PaintBox1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
          int X, int Y)
{
TPaintBox *pb = static_cast<TPaintBox*>(Sender);
int x = X / scope + x0;
int y = Y / scope + y0;
Label1->Caption = x;
Label2->Caption = y;
if(field[x-1][y-1] == 0)
    DrawCell(pb->Canvas, x, y);
else
    DeleteCell(pb->Canvas, x, y);
}
//---------------------------------------------------------------------------
 
 
 
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    TPaintBox *pb = static_cast<TPaintBox*>(Sender);
    CleanField();
    pb->Refresh();
}
//---------------------------------------------------------------------------
 
 
 
 
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    TPaintBox *pb = static_cast<TPaintBox*>(Sender);
    CleanField();
    pb->Refresh();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    TPaintBox *pb = static_cast<TPaintBox*>(Sender);
    for(int i = 0; i < height; i++)
        for(int j = 0; j < wight; j++)
        {
            DrawCellFromArray(pb->Canvas, i, j);
        }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button3Click(TObject *Sender)
{
if(Timer1->Enabled == true)
{
    Button3->Caption = L"Start";
    Timer1->Enabled = false;
}
else
{
    Button3->Caption = L"Stop";
    Timer1->Enabled = true;
}
 
}
//---------------------------------------------------------------------------
Миниатюры
Ошибка Access violation  
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.09.2015, 18:42
Ответы с готовыми решениями:

Ошибка Access violation
Здравствуйте! я написал код для реализации метода Хафмана, при малых картинках он работает...

Ошибка access violation
после вставки на форму компонента image при запуске программы всплывает ошибка &quot;access violation at...

Ошибка Access violation
Подскажите пожалуйста работать начал в данном продукте, до этого работал в C++ Builder, Red Studio...

Ошибка Access violation
struct TMaterialProperties { int Number; String Name; double E, R02, Rm, Zt, R_1,...

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31243 / 20423 / 7960
Регистрация: 22.10.2011
Сообщений: 35,452
Записей в блоге: 6
23.09.2015, 20:45 2
Собственно, а почему Sender приводится к типу TPaintBox? Это не тот случай, нельзя здесь приводить Sender, в обработчик клика таймера передается не указатель на TPaintBox. Кстати, и в FormCreate тоже. Попробуй получить
C++
1
2
3
4
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    String s = Sender->ClassName(); // имя класса сендера
}
, и убедись в том, что нельзя его кастовать к TPaintBox...
0
1686 / 886 / 203
Регистрация: 25.11.2009
Сообщений: 1,816
23.09.2015, 20:46 3
Как так?
Цитата Сообщение от Di3go Посмотреть сообщение
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
* * TPaintBox *pb = static_cast<TPaintBox*>(Sender);
* * for(int i = 0; i < height; i++)
* * * * for(int j = 0; j < wight; j++)
* * * * {
* * * * * * DrawCellFromArray(pb->Canvas, i, j);
* * * * }
}
В эту функцию в Sender приходить указатель на таймер. Его невозможно скастовать к типу TPaintBox...
0
Аноним
5 / 5 / 4
Регистрация: 15.12.2013
Сообщений: 149
23.09.2015, 21:51  [ТС] 4
Lelik-pahan, И что можно сделать?

Не по теме:

Извините, я не сильно разбираюсь в терминологии. И я, честно говоря, почти ничего не понял.

0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
31243 / 20423 / 7960
Регистрация: 22.10.2011
Сообщений: 35,452
Записей в блоге: 6
23.09.2015, 22:22 5
Лучший ответ Сообщение было отмечено Di3go как решение

Решение

Цитата Сообщение от Di3go Посмотреть сообщение
что можно сделать?
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    for(int i = 0; i < height; i++)
        for(int j = 0; j < wight; j++)
        {
            DrawCellFromArray(PaintBox1->Canvas, i, j);
        }
}
То же самое (поменять pb на PaintBox1) и в OnCreate формы.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.09.2015, 22:22

Ошибка Access Violation
typedef struct { char udk; char title; char author; int year; int amount; ...

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

Ошибка access violation address
Выкидывает ошибку 'Access violation address 5000BD63 in module 'rtl140.bpl'. Read of address...

Ошибка Access violation at address in modul
при сложении ошибки нет, а при вычитании если в Edit1 ввести число больше чем в Edite2, то есть...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.