PDA

View Full Version : سوال: رفع اشکال در مورد این کد



motherboard
پنج شنبه 18 اردیبهشت 1393, 15:14 عصر
سلام.یکی به من بگه چرا این وقتی توی کد و این ارایه این قدر اندیس قرار میدم هنگ می کنه :گیج:. ایا این ربطی به مقدار فضایی که سیستم عامل به کامپایلر اختصاص داده است و اگه این طوری است و یا اگر به این دلیل نیست راهی وجود داره تا یک کاری کنیم بشه تعداد متغیرهای زیادی رو در یک ارایه قرار داد؟؟؟با تشکر.

#include <conio.h>
#include <iostream>
using namespace std;
int main()
{int a[10000000];
for(int i=1;i<=10000000;i++)
cin>>i;
getch();
return 0;}

parvizwpf
پنج شنبه 18 اردیبهشت 1393, 15:55 عصر
چرا اینکارو میخواهید انجام بدید؟

motherboard
پنج شنبه 18 اردیبهشت 1393, 16:42 عصر
چرا اینکارو میخواهید انجام بدید؟

مثلا برای وارد کردن اسامی با تعداد بالا.سوالم اینه که راهی نیست تا جلوی این هنگ شدن گرفته بشه؟؟؟؟؟

parvizwpf
پنج شنبه 18 اردیبهشت 1393, 17:01 عصر
خودت هم میدونی که منطقی نداریم جایی که آرایه ای پر کنیم اونم 10 میلیون نام یکجا.بهتره اینو مطالعه کنید:
http://stackoverflow.com/questions/1847789/segmentation-fault-on-large-array-sizes

rahnema1
پنج شنبه 18 اردیبهشت 1393, 17:34 عصر
همون طور که دوستمون هم اشاره کردن اینجا stack overflow یا سرریز پشته رخ میده
متغیرهای محلی ( با مدت حافظه automatic ) در بخشی از حافظه به نام پشته ذخیره میشن.
معمولا مقدار پیش فرض پشته کم در نظر گرفته میشه در نتیجه وقتی حجم متغیر شما از یک اندازه بالاتر میره این اتفاق می افته
برای رفع این مشکل می تونید مقدار پشته را هنگام کامپایل یک اندازه زیاد تعیین کنید
مثلا شما اگه از devcpp استفاده می کنید در قسمت compile options می تونید این گزینه را بذارید

-Wl,--stack,40000000

یا ویژوتال سی پلاس پلاس این دستور را هنگام کامپایل داره

/F 40000000

یا اینکه اصلا متغیر را به صورت static تعریف کنید

static int aa[10000000];

یا اینکه متغیر را بیرون تابع main تعریف کنید تا حافظه اون static بشه

int aa[10000000];
int main()
{for(int i=1;i<=10000000;i++)

یا اصلا روش بهتر اینه که از حافظه پویا استفاده کنید

int main()
{int* aa = new int[10000000];