| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Программа работает, но не совсем |
| Автор: Гость_Константин 31.10.2005, 21:48 |
| Доброго времен суток! На данном этапе развития программки она должна рисовать правельный 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; } //--------------------------------------------------------------------------- |
| Автор: Константин (автор вопроса) 31.10.2005, 22:35 |
| Step over заканчивается на __fastcall AnsiString(): Data(0) {} Что это и откуда я понятия не имею Может стоит Editы обнулить, других строк у меня впринципе нет? |
| Автор: S.A.P. 31.10.2005, 22:52 | ||
попробуй убрать +1. Тут по идее у тебя идет выход за пределы массива. |
| Автор: Константин(всё тот же) 31.10.2005, 23:37 |
| Спасибо! Ошибка была там, но и не только. Я в методе Polygon написал "n", а не "n-1"-там нумерация с нуля, как и в масивах. Потом не понимая в чём дело, я искал ошибку в другом месте, потом сейчас не понмню даже почему и зачем поставил n+1 в том цикле. Обрадовавшись, что всё рисует там ошибку даже и не ожидал увидеть. Ещё раз Спасибо! |