Форум — Ответы     (  К темам )
 ?  Иван: Срочно!!! Проблема с памятью (31-01-2003 11:59:42)
Люди подскажите почему этот код компилируется нормально а при выполнении выдает ошибку "Acces violation at address 40034838 in module "VCL50.BPL" read of address 00000023"
-----------------------------------------------------------------------
void DrowRectangle(){
TMyButton Obj;
AnsiString FileBitmap = "klav.bmp";
Graphics::TBitmap *Bitmap;
Graphics :: TCanvas *Canvas;
Bitmap = new Graphics::TBitmap();
Bitmap->LoadFromFile(FileBitmap);
Canvas->Draw(15,197,Bitmap);

TPoint points[5]; // НА ЭТОЙ СТРОКЕ ОСТАНАВЛИВАЕТСЯ
points[0].x = Obj.GetX0();
points[0].y = Obj.GetY0();
points[1].x = Obj.GetX1();
points[1].y = Obj.GetY0();
points[2].x = Obj.GetX1();
points[2].y = Obj.GetY1();
points[3].x = Obj.GetX0();
points[3].y = Obj.GetY1();
points[4].x = Obj.GetX0();
points[4].y = Obj.GetY0();

Bitmap->Canvas->Pen->Color = clRed;
Bitmap->Canvas->Pen->Width = 3;
Bitmap->Canvas->Polyline(points,4);
Canvas->Draw(15,197,Bitmap);
delete Bitmap;
}
------------------------------------------------------------------------
Подскажите ,что не так.Спасибо!
 Георгий (31-01-2003 20:47:41)
у тебя на 5-й строке обьявлен указатель на Canvas, но ему не сопоставлен реальный обьект.
потом ты для этой canvas вызвал метод, который что-то в памяти испортил и (т.к. это исключение типа ошибки) отладка останавливается на следующей строке.
 Иван (01-02-2003 01:22:26)
Немного переделал код :Ошибка та же,только адрес памяти другой.
-----------------------------------------------------------------------
void DrowRectangle(){
TMyButton Obj;
Graphics::TBitmap *Bitmap = new Graphics::TBitmap;
AnsiString FileBitmap = "klav.bmp";
Bitmap->LoadFromFile(FileBitmap);

TImage *Image1;

Image1->Picture->Assign(Bitmap);
TPoint points[5];
points[0].x = Obj.GetX0();
points[0].y = Obj.GetY0();
points[1].x = Obj.GetX1();
points[1].y = Obj.GetY0();
points[2].x = Obj.GetX1();
points[2].y = Obj.GetY1();
points[3].x = Obj.GetX0();
points[3].y = Obj.GetY1();
points[4].x = Obj.GetX0();
points[4].y = Obj.GetY0();
Bitmap->Canvas->Pen->Color = clRed;
Bitmap->Canvas->Pen->Width = 3;
Bitmap->Canvas->Polyline(points,4);
Image1->Picture->Assign(Bitmap);
delete Bitmap;
}
------------------------------------------------------------------------

Использование ф-ии в программе:
TMyButton Obj;
---
---
---
Obj.DrowRectangle();

------------------------------------------------------------------------
Подскажите ,что не так.Спасибо!
 Иван (01-02-2003 02:43:30)
Люди, можете не отвечать на вопрос --- Я всё понял :) Извините за нехороший вопрос! :)