Table of Contents
محاسبات نقطه ای یک ویژگی مشترک در C و C ++ است که اجازه می دهد دستکاری مستقیم آدرس های حافظه را داشته باشد، در حالی که استفاده قدرتمند، نادرست می تواند منجر به اشکالات، آسیب پذیری های امنیتی و رفتار نامشخص شود.این مقاله نمونه های دنیای واقعی را نشان می دهد که هر دو برنامه ها و مشکلات محاسباتی اشاره گر را نشان می دهد.
مثال 1: آرایه های Traversing
محاسبه پوینتر اغلب به آن از طریق آرایه ها به طور موثر استفاده می شود.برای مثال، به جمع آوری عناصر یک آرایه صحیح:
[در این باره] استفاده از آن (فضی: ۱)
مجموع = 0
⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
(در مورد I = 0، i <؛ اندازه؛ i++)
مجموع +=(ptr+ i)؛
😉
این روش به درستی به عناصر آرایه با استفاده از محاسبه نقطه دسترسی دارد.
دانلود زیرنویس فارسی فیلم Pointer Arithmetic Beyond Bounds
اشاره کنندگان متحرک فراتر از حافظه اختصاص داده شده می توانند رفتار نامشخص ایجاد کنند.
⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
(int I = 0; i <= Size; i++)
چاپ (%dn)، * (ptr + i)
😉
دسترسی به * (فرشته + اندازه) از محدوده آرایه ای فراتر می رود که منجر به نتایج غیر قابل پیش بینی می شود.
مثال دوم: String Manipulation
محاسبه پوینتر اغلب در پردازش رشته استفاده می شود.به عنوان مثال، کپی کردن یک رشته:
[در این باره] [[[ویرایش]
char*src = "سلام"
↑ [[ویرایش]
char*p = src
char *q = dest
(*)
*q++ = *p++
😉
*q = "
دانلود بازی Pitfall 2: Off-by-One Errors in String Copying
عدم تخصیص فضا برای اصطلاحاب یا کپی کردن فراتر از بافر باعث ایجاد سرریزی بافر می شود.
↑ «[[ویرایش]
char *p = "World"
(int I = 0; i <= 5; i++)
(وَهُمَهُمَهُمَهُمَهُمَهُمَهُمَهُمَهُمَهُوا مِنَّا مِنَهُمَهُمَهُوا مِنَّهُمَهُمَهُمَهُمَهُوا مِهُمَهُوا مِهُمَهُمَهُوا مِهُمْهُوا مِهُوا مِهُوا مِهُمْهُمْهُمَهُمَهُمِهُمْهُوا مِهُمْهُمْهُمَهُمْهُوا مِهُمَهُمَهُوا مِهُمَهُمَهُمَهُوا مِنَهُمَهُمَهُمَهُمَهُمَهُمَهُمَهُمَهُوا مِنَهُوَهُم
😉
این شش کاراکتر را به یک بافر پنج کاراکتر کپی می کند که باعث پر شدن سر می شود.
نتیجه گیری
محاسبات پوینتر انعطاف پذیری در C و C++ را فراهم می کند، اما نیاز به انجام دقیق برای جلوگیری از خطا دارد. درک مشکلات رایج به جلوگیری از اشکالات و مسائل امنیتی در توسعه نرم افزار کمک می کند.