PDA

View Full Version : اشاره گر برنامه رو به هم می ریزه!



Developer Programmer
سه شنبه 14 تیر 1384, 14:53 عصر
کدی که میذارم قسمتی از برنامه است که اشاره گر Root که قراره ریشه درخت باینری باشه قاط زده مشکلش چیه ؟( Access Violation می ده)



implementation
{$R *.dfm}

Type
TreeP = ^TTree;
TTree = Record // Binary Tree
Size : Extended; // size of chunks
Name : String;
Status: Byte; // free or reserved
Left : TreeP;
Right : Treep;
end;
var
RootP : ^TreeP;
UpperLimit,MemSize,Wasted: Extended;



procedure TForm1.btnClick(Sender: TObject);
begin
New(RootP); //
RootP^.Size:= MemSize; // total RAM size in Root
Rootp^.Name:='Total';
RootP^.Status:= 0; // free
RootP^.Left:=Nil;
RootP^.Right:=Nil;

دنیای دلفی
سه شنبه 14 تیر 1384, 23:04 عصر
ظاهرا مشکلی نداره :موفق:

Developer Programmer
سه شنبه 14 تیر 1384, 23:33 عصر
ظاهرا مشکلی نداره
ممنون که به خاطرم وقت گذاشتین...
مشکل من هم اینه که به نظر میاد کدم با کد تمام کتابهای پاسکال یکیه ...
به دو کد زیر نگاه کنین


{This code generates, access violation error!}

Type
TreeP = ^TBinaryTree;
TBinaryTree = Record // Binary Tree
Left : TreeP;
Right : Treep;
Size : Extended; // size of chunks
Status: Byte; // free or reserved
Name : String;
end;

Var
P : ^TreeP;

begin
New(P);
P^.Left:=Nil;
P^.Right:=Nil;
P^.Size:= 1023; // total RAM size in Root
P^.Status:= 0;
P^.Name:= 'Total';
Write('Hello'); // Access Violation //
Readln;
Dispose(p);
end;




{This code can run without any kind of error}
Type
P=^e;
e=Record
Name:String;
Status:Byte;
Size:Extended;
Prev:p;
Next:P;
end;

var
r:P;
begin
New(r);
r^.Name:='Hi';
r^.Status:=0;
r^.Size:=1024;
r^.Prev:=Nil;
r^.Next:=Nil;
WriteLn('Hi');
Readln;
Dispose(r);
end.

کد اولی قاطی می کنه (وقتی BreakPoint میذارم مقدارTotal رو Sotal نشون میده) و Access Violation میده ولی کد دوم (که در حقیقت اسم متغیرها رو عوض کردم) درست اجرا میشه...
لطفا روی سیستم تون تست کنین ببینین شاید مشکل از ویندوز منه :sad2:

vcldeveloper
چهارشنبه 15 تیر 1384, 02:51 صبح
Var
P : ^TreeP;

اینو باید می نوشتی...


P : TreeP;

TreeP خودش یک pointer هست، برای تعریف یک متغیر از TreeP، لازم نیست که دوباره از ^ استفاده کنی.

Developer Programmer
چهارشنبه 15 تیر 1384, 10:54 صبح
خودش یک pointer هست، برای تعریف یک متغیر از TreeP، لازم نیست که دوباره از ^ استفاده کنی
استاد گرامی جناب آقای کشاورز ... من جدا از بابت کمکتان و به خاطر وقتی که گذاشتین ممنونم ... کمک بزرگی کردین ... پروژه رو نجات دادین... می بوسمتون