PDA

View Full Version : باگ دلفی یا اشکال کد؟



صابر طهماسبی
سه شنبه 07 اردیبهشت 1389, 21:37 عصر
سلام
چند ساعته دارم با این کد ور می رم دیگه دیوانه شدم تقاضای عاجزانه دارم کمک کنید!:عصبانی++:
کد کلاس:


type
MyClass=class
cur:integer;
arr:array of char;
procedure add(c:char);
constructor Create; overload;
end;

constructor MyClass.Create();
begin
self.cur:=0;
SetLength(self.arr,self.cur+1);
end;

procedure MyClass.add(c: Char);
begin
self.arr[self.cur]:=c;
self.cur:=self.cur+1;
SetLength(self.arr,self.cur);
end;
کد تست :





procedure TForm1.test_btnClick(Sender: TObject);
var
obj:MyClass;
begin
obj.add('a');
end;
یه کلید به اسم test دارم که تا روش کلیک می کنی برنامه خطا می ده واین هم تصویر خطا:

Felony
سه شنبه 07 اردیبهشت 1389, 21:51 عصر
کدتون اشکال داره ، من کدتون رو نخوندم فقط بخش تست کلاس رو نگاه کردم ، معلومه که با کلاس ها در دلفی آشنایی ندارید ، برای استفاده از یک کلاس باید قبل از استفاده یک نمونه از اون کلاس رو بسازید ، کد اصلاح شده برای تست :

var
obj:MyClass;
begin
obj:= MyClass.Create;
obj.add('a');
end;

مهران رسا
سه شنبه 07 اردیبهشت 1389, 22:47 عصر
http://www.delphibasics.co.uk/RTL.asp?Name=Class
(http://www.delphibasics.co.uk/RTL.asp?Name=Class)

صابر طهماسبی
چهارشنبه 08 اردیبهشت 1389, 07:07 صبح
بسیار سپاسگزارم
من یه پروژه دارم برای 28 اردیبهشت تازه کار با دلفی رو شروع کردم از بس عجله دارم چند باره موارد مشابه این برام پیش میاد!:متفکر:

Delphi Coder
پنج شنبه 09 اردیبهشت 1389, 20:26 عصر
var
obj:MyClass;
begin
obj:= MyClass.Create;
obj.add('a');
end;
البته خود همین کد هم یه ایراد کوچیک داره چون obj داخل تابع یا پروسیجر local هست اگر قبل از خروج free نشه باعث memoryleak میشه.

Felony
جمعه 10 اردیبهشت 1389, 00:02 صبح
var
obj:MyClass;
begin
obj:= MyClass.Create;
obj.add('a');
end;
البته خود همین کد هم یه ایراد کوچیک داره چون obj داخل تابع یا پروسیجر local هست اگر قبل از خروج free نشه باعث memoryleak میشه.

بله درسته من فقط ایراد کد رو گفتم.
برای آزاد کردن حتما باید از بلوک Try ... Finally استفاده بشه تا آزاد شدن حافظه اختصاص یافته به شئ تضمین بشه .