تالار گفتمان مانشت
زباله و ارجاع معلق - نسخه‌ی قابل چاپ

زباله و ارجاع معلق - firouziam - 27 دى ۱۳۹۲ ۱۰:۴۱ ب.ظ

با سلام

سوال زیر در ارتباط با زباله و ارجاع معلق هست؟! پاسخنامه میگه که هردوتا رو تولید میکنه ولی من متوجه نمیشه چرا ارجاع معلق تولید میکنه؟! ممنون میشم اگه کسی یه توضیح مختصری بده

RE: زباله و ارجاع معلق - equilibrium - 28 دى ۱۳۹۲ ۱۲:۲۰ ب.ظ

(۲۷ دى ۱۳۹۲ ۱۰:۴۱ ب.ظ)firouziam نوشته شده توسط:  با سلام

سوال زیر در ارتباط با زباله و ارجاع معلق هست؟! پاسخنامه میگه که هردوتا رو تولید میکنه ولی من متوجه نمیشه چرا ارجاع معلق تولید میکنه؟! ممنون میشم اگه کسی یه توضیح مختصری بده

موقعی که زیربرنامه pointer کارش تموم میشه آدرس آرایه p رو برمیگردونه (در c آرایه ها همیشه با آدرس منتقل میشن) و آدرس میره در اشاره گر q قرار میگیره؛ منتها با اتمام فراخوانی pointer کل حافظه ای که بهش داده شده (از جمله آرایه c) آزاد میشه؛ بنابراین q میشه ارجاع معلق؛ از طرفی خود q حاوی مقدار "mmm" بوده که با دستور q=pointer دسترسی به اون قطع میشه (ایجاد حافظه زباله)؛

RE: زباله و ارجاع معلق - firouziam - 28 دى ۱۳۹۲ ۰۵:۳۱ ب.ظ

(۲۸ دى ۱۳۹۲ ۱۲:۲۰ ب.ظ)Ghiasoddin نوشته شده توسط:  
(27 دى ۱۳۹۲ ۱۰:۴۱ ب.ظ)firouziam نوشته شده توسط:  با سلام

سوال زیر در ارتباط با زباله و ارجاع معلق هست؟! پاسخنامه میگه که هردوتا رو تولید میکنه ولی من متوجه نمیشه چرا ارجاع معلق تولید میکنه؟! ممنون میشم اگه کسی یه توضیح مختصری بده

موقعی که زیربرنامه pointer کارش تموم میشه آدرس آرایه p رو برمیگردونه (در c آرایه ها همیشه با آدرس منتقل میشن) و آدرس میره در اشاره گر q قرار میگیره؛ منتها با اتمام فراخوانی pointer کل حافظه ای که بهش داده شده (از جمله آرایه c) آزاد میشه؛ بنابراین q میشه ارجاع معلق؛ از طرفی خود q حاوی مقدار "mmm" بوده که با دستور q=pointer دسترسی به اون قطع میشه (ایجاد حافظه زباله)؛

مرسی، آره درست میگید، نمیدونم من چرا همش پیش خودم میگفتم وقتی زیربرنامه تموم میشه آرایه و p از بین میرن پس کسی نیست که به آرایه اشاره کنه که بخواد ارجاع معلق ایجاد شه، حواسم نبود که این q بیچاره داره اشاره میکنه!

RE: زباله و ارجاع معلق - soheila2012 - 29 دى ۱۳۹۲ ۰۹:۵۵ ب.ظ

ببخشید من درباره ی ارجاع معلق و زباله چیزی نمیدونم.به نظرتون الان فرصت هست که یاد بگیرم؟
این درس که تو دانشگاه نداشتیم و مجبور بودم از رو فایل بخونم که متوجه نشدم.
اگه میتونم یاد بگیرم یه زحمت بکشین به این سوال جواب بدین.
پیش پیش مرسی!
[تصویر:  238807_24958623299584791348.jpg]

RE: زباله و ارجاع معلق - firouziam - 30 دى ۱۳۹۲ ۰۸:۴۳ ب.ظ

(۲۹ دى ۱۳۹۲ ۰۹:۵۵ ب.ظ)soheila2012 نوشته شده توسط:  ببخشید من درباره ی ارجاع معلق و زباله چیزی نمیدونم.به نظرتون الان فرصت هست که یاد بگیرم؟
این درس که تو دانشگاه نداشتیم و مجبور بودم از رو فایل بخونم که متوجه نشدم.
اگه میتونم یاد بگیرم یه زحمت بکشین به این سوال جواب بدین.
پیش پیش مرسی!

آره چیزی نداره این دوتا مفهوم، خیلی ساده است(البته میدونم که خودم سوال گذاشتم و این یعنی خودم توش یکم مشکل داشتم ولی بعضی وقتا آدم از بی دقتی حقیقتو جلو چشش هست و نمیبینه نه از بی دانشی) به هر حال من جسارت میکنم یه کوچولو توضیح میدم اساتید ببخشن!

زباله و ارجاع معلق جفتشون به دلیل استفاده از اشاره گرها بوجود میان:

زباله یعنی اینکه ما حافظه ای رواشغال کنیم(از هیپ یا ....) و با یه اشاره گر بهش دسترسی داشته باشیم ولی مقدار اشاره گر رو بعد از مدتی تغییر بدیم (معمولا جایگزین با یه اشاره گر دیگه) و به همین خاطر دیگه نمیتونیم به اون مکان از حافظه دسترسی داشته باشیم، پس اون مکان میشه زباله، مثل اتفاقی که اینجا واسه Q افتاده(یه حافظه گرفته بعد با دستور Q=P دسترسیش رو از دست داده- چون بعد از این دستور Q به همون مکانی اشاره میکنه که P اشاره میکنه)

ارجاع معلق هم یعنی دوتا اشاره گر به یجا اشاره کنن و بعد ما اون مکان از حافظه رو آزاد کنیم، اینجوری اشاره گر دوم به جایی اشاره میکنه که دیگه از نظر منطقی محل حافظه تخصیص یافته به ما نیست(و در واقع اشاره گر نباید به اونجا اشاره کنه!) اتفاقی که بعد از(Free(Q افتاده(حافظه تخصیص یافته به Q آزاد شده ولی R همجنان داره به اونجا اشاره میکنه)

اینجا صددرصد زباله و ارجاع معلق داریم، تکه تکه شدن هم یکم مبهمه ولی فک کنم بدلیل نوع تخصصی فضای هیپ تکه تکه شدنم داریم