![]() |
|
|
![]()
|
|
| Гость_Константин |
|
|||
|
Unregistered |
Доброго времен суток!
На данном этапе развития программки она должна рисовать правельный n-угольник. Она его успешно рисует, но после нажатия кнопки выход появляется вот такая ошибка: Project Project1.exe raised exception class EAccessViolation with message'Access violation at address 32609C45. Write of address FFFFFFA4' Process stopped. Use Step or Run to continue. Либо я с указателями что-то путаю, либо где-то у меня жуткая ошибка, о которой я даже и не догадываюсь. Так что если кто поможет буду очень благодарен. Вот её код: //--------------------------------------------------------------------------- #include <math.h> #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- int round(double x) { if ((ceil(x)-x)<0.5) return ceil(x); else return floor(x); } int get_y (int n, int r,double phi) {return 100-round(r*sin(M_PI/2+phi)); } int get_x (int n, int r, double phi) { return 100+round(r*cos(M_PI/2+phi)) ; } TPoint* getpoints(int n, int r) { double phi = 0; TPoint *array = new TPoint[n]; for(int i = 0; i < n+1; i++) { array[i] = Point(get_x(n, r, phi),get_y(n,r, phi)); phi+=2*M_PI/n; } return array; } void __fastcall TForm1::FormActivate(TObject *Sender) { Image1->Canvas; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { if ((Edit1->Text!="")&&(Edit2->Text!="")) {int n=StrToInt(Edit1->Text); int r=StrToInt(Edit2->Text); if ((n>2)&&(r>20)) Image1->Canvas->Polygon(getpoints(n,r),n); else ShowMessage("Не верно указанно или количество граней, или длина, или одно из полей пустое"); } else ShowMessage("Не верно указанно или количество граней, или длина, или одно из полей пустое"); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button5Click(TObject *Sender) { Close(); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { Action=caFree; } //--------------------------------------------------------------------------- |
|||
|
||||
| Константин (автор вопроса) |
|
|||
|
Unregistered |
Step over заканчивается на
__fastcall AnsiString(): Data(0) {} Что это и откуда я понятия не имею Может стоит Editы обнулить, других строк у меня впринципе нет? |
|||
|
||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: нет Всего: 71 |
попробуй убрать +1. Тут по идее у тебя идет выход за пределы массива. |
|||
|
||||
| Константин(всё тот же) |
|
|||
|
Unregistered |
Спасибо! Ошибка была там, но и не только.
Я в методе Polygon написал "n", а не "n-1"-там нумерация с нуля, как и в масивах. Потом не понимая в чём дело, я искал ошибку в другом месте, потом сейчас не понмню даже почему и зачем поставил n+1 в том цикле. Обрадовавшись, что всё рисует там ошибку даже и не ожидал увидеть. Ещё раз Спасибо! |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |