PDA

View Full Version : سوال: تجاوز از محدوده آرایه ها



sourcecode
چهارشنبه 05 شهریور 1393, 19:47 عصر
من برنامه زیر را در کامپایلر VSC++.Net اجرا می کنم که 20 بار حلقه For اجرا می شود و در کامپایلر Borland C++ ده بار اجرا میشه در صورتی که باید 5 بار اجرا شود .
در ضمن با دستور str[i]<5 همون 5 بار اجرا میشه . می خواستم در مورد این مشکل دوستان توضیح بیشتری بدند .

#include "stdafx.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
int i,s[5]={1,2,3,4,5};
for(i=0;s[i];i++)
cout<<i<<" ";
cin.get();
cin.get();
return 0;
}

rahnema1
چهارشنبه 05 شهریور 1393, 23:09 عصر
تا وقتی که s[i برابر صفر نشده باشه حلقه کار می کنه.
for را میشه به این صورت نوشت تا بهتر بشه تحلیل کرد

i=0;
while(s[i])
{
cout<<i<<" ";
i++;
}

یک نکته دیگه آرایه می تونه به اشاره گر تبدیل بشه در این صورت آدرس خانه ابتدایی آرایه، برابر با اشاره گر مورد نظر خواهد بود

حالا وقتی ما بنویسیم

int s[5]={1,2,3,4,5};
int a=s[3];

در کامپیوتر به این صورت در میاد

int a=*(s+3);

یعنی آدرس خانه ابتدایی آرایه گرفته میشه و با 3 جمع می شه (حاصل این عمل یک آدرس خواهد بود) و سپس محتوای اون آدرس بیرون کشیده میشه

توی این حلقه fi مقدار i همین طور اضافه میشه و برنامه کاری به این نداره که سایز آرایه چند عضوه. زیرا این کار صرفا بیرون کشیدم محتوای یک آدرس کامپیوتر هست
اما چرا تا 10 برنامه پیش می ره علتش کاملا تصادفیه. به عبارت دیگه در ده تا خانه بعد از خانه ابتدایی آرایه عدد صفر قرار گرفته که ممکنه یک بار دیگه که برنامه را اجرا کنید مثلا در پنجاهمین خانه عدد صفر قرار بگیره
بعضی وقتها ممکنه به یک آدرس برسیم که ممکنه باعث بشه برنامه کلا بسته بشه
در نتیجه باید دقت کنید اندکس ها را تا انتهای آرایه بیشتر اضافه نکنید