اشاره گرهای معلق

دانشنامه عمومی

اشاره گرهای معلق در زبانهای برنامه نویسی به یک شیء نامشخص اشاره می کند که سلامت کد را به خطر می اندازد.
اشاره گر معلق زمانی به وجود می آید که یک شی حذف یا آزاد شود، بدون اینکه مقدار اشاره گر تغییر شده باشد. در نتیجه آن اشاره گر به مکانی اشاره می کند که دیگر وجود ندارد. حتی ممکن است سیستم عامل مکان قبلی حافظه که آزاد شده بود را به فرایند دیگری داده باشد، در این صورت آن اشاره گر به دادهای متفاوت اشاره می کند. [ ۱]
در بسیاری از زبان های برنامه نویسی، مانند سی، وقتی یک شیء از محدوده خارج می شود یا صریحاً دستور آزاد شدن دریافت می کند، اشاره گرهایی که به آن شیء اشاره می کنند تغییر نمی کنند.
به عنوان مثال به کد زیر توجه کنید:
char *dp = NULL; /* … */ { char c; dp = & c; } /* c falls out of scope */ /* dp is now a dangling pointer */ در صورتی که سیستم عامل بتواند اشاره گرهایی که به پیوندهای پوچ می رسند را شناسایی کند، می تواند آن ها را برابر ۰ یا NULL قرار دهد. یک راه دیگر این است که به طور مثال اجازه داده نشود dp دوباره استفاده شود.
یک راه دیگر به وجود آمدن اشاره گر معلق، استفادهٔ همزمان از تابع malloc و در ادامه free است. در واقع بعد از اینکه یک اشاره گر با malloc مقداردهی می شود و سپس توسط free خالی می شود، و اشاره گر استفاده شده معلق می شود. به کد زیر توجه کنید:
char *dp = malloc ( A_CONST ) ; /* … */ free ( dp ) ; /* dp now becomes a dangling pointer */ dp = NULL; /* dp is no longer dangling */ /* … */ یک اشتباه رایج استفاده از آدرس متغیرهای محلی در یک تابع است که با برگرداندن یک اشاره گر به آن قسمت، آن اشاره گر را معلق می کند؛ چرا که اشاره گر استفاده شده به جایی از حافظه اشاره می کند که پس از اتمام اجرای تابع، آزاد شده و دیگر تضمینی بر حفظ مقادیر وجود ندارد.
int num = ۱۲۳۴; /* … */ return # تلاش برای خواندن مقدار برگشت داده شده از تابع، پس از اندکی بعد از فراخوانی ان تابع ممکن است نتیجه ۱۲۳۴ را برگرداند اما در ادامه برنامه احتمالاً آن حافظه برای استفاده دیگری اختصاص خواهد یافت و مقدار مورد نظر ما، پاک خواهد شد.
اشاره گر وحشی زمانی به وجود می آید که اشاره گر قبل از اولین استفاده، مقداردهی نشده باشد. در واقع زمانی که یک اشاره گر مقداردهی اولیه نشود، آن اشاره گر حتماً وحشی خواهد بود. به مثال زیر توجه کنید:
عکس اشاره گرهای معلق
این نوشته برگرفته از سایت ویکی پدیا می باشد، اگر نادرست یا توهین آمیز است، لطفا گزارش دهید: گزارش تخلف

پیشنهاد کاربران

بپرس