PDA

View Full Version : تعریف آرایه با طول زیاد



ali ali10
دوشنبه 24 اسفند 1394, 03:42 صبح
با سلام به همه دوستان
من در ویژوال استدیو به مشکلی بر خوردم.
یک برنامه نوشته ام که در آن 8 آرایه با طول زیاد وجود دارد البته کل این آرایه ها به 2 مگابایت هم نمی رسد. مشکل اینجا است که زمانی که می خواهم برنامه را دیباگ کنم کامپایلر خطای Unhandled excption می دهد و اعلام می کند که استک پر شده. ولی زمانی که اندازه ها را کم می کنم مثلا نصف برنامه به درستی کار می کند.
من احتمال می دهم این مشکل از تنظیمات دیباگر باشد.
آیا کسی می داند که چگونه این مشکل را باید برطرف کرد؟

winner1
دوشنبه 24 اسفند 1394, 07:30 صبح
از ارایه با طول متغیر استفاده کن با استفاده از پوینترها شما با انتساب طول زیاد در واقع خونه های رم رو رزرو میکنی خب طبیعیه استیک فول بشه موفق باشی

ali ali10
دوشنبه 24 اسفند 1394, 18:11 عصر
با سلام و تشکر از شما
ولی من قبلا هم آرایه هایی با طول حتی 500مگابایت هم تعریف کرده بودم و مشکلی پیش نیامده بود. 2 مگابایت مقدار بسیار کمی است. می دانم که مشکل از برنامه وحتی ram نیست. حرف شما درسته آرایه با طول متغییر بهتره ولی راستش برای من بارها پیش آمده که وقتی از آرایه با طول متغییر استفاده کرده ام با فرا خوانی چند تابع پشت سر هم بخشی از اطلاعات تغییر کرده و از اعتبار افتاده مخصوصا اگر طول متغییر زیاد بوده باشد. و از آنجا که چندین تابع مختلف و تو در تو از این متغییرها استفاده می کنند باید آنرا به صورت عادی تعریف کنم.
آیا کسی می داند مشکل از کجاست.

ASM6502
سه شنبه 25 اسفند 1394, 02:03 صبح
از کدوم کامپایلر استفاده میکنی؟
لطفا سورس کد برنامه رو بزار.

ali ali10
سه شنبه 25 اسفند 1394, 04:00 صبح
از consol application c++ در مورد برنامه هم طول کدهای آن خیلی زیاده نزدیک به 20000 خطه از طرفی اطمینان دارم برنامه درسته چون با کم کردن ابعاد آرایه بدون کوچکترین مشکلی کار میکنه. علاوه برآن خطا قبل از اجرای حتی اولین خط برنامه و در همان اول کار که کامپایلر می خواهد فضای مورد نیاز متغییر های سراسری را ایجاد کند رخ می دهد. پس برنامه مشکلی ندارد. قبلا هم گفتم من خودم احتمال می دهم مشکل از تنظیمات debuger است اما از کجا؟؟؟ نمیدانم!!!!!!!!!
آیا تا کنون کسی به این مشکل ویا مشکلی مشابه بر نخورده است.

winner1
سه شنبه 25 اسفند 1394, 05:54 صبح
شاید مشکلل تو عملیاتته تا کد نزاری که نمیشه جواب داد

ali ali10
سه شنبه 25 اسفند 1394, 07:44 صبح
دوستان همانطور که گفتم حتی اولین خط از تابع main هم اجرا نمی شود آخر اگر مشکل از کد برنامه بود حداقل باید خط اول را اجرا می کرد. علاوه براین اصلا من تابع main را هم که خالی می کنم باز خطا می دهد. ولی زمانی که طول متغییر ها را کم می کنم مشکل بر طرف می شود.

zero_ox
سه شنبه 25 اسفند 1394, 11:55 صبح
سلام می تونید این صفحه رو ببینید
https://msdn.microsoft.com/en-us/library/8cxs58a6(v=vs.120).aspx

pbm_soy
سه شنبه 25 اسفند 1394, 14:50 عصر
معمولا برای کامپایل برنامه های c/c++ بستگی به میزان حافظه مصرفی برنامه باید از مدل خاص حافظه باید استفاده کنید
مدلهای حافظه برای کامپایل برنامه ها به ترتیب زیر است
Tiny
Small
Medium
Large
Huge
البته اگر اشتباه نکرده باشم
پس شما بسته به کامپایلری که استفاده میکنید باید یکی از این مدلها را براش تنظیم کنید تا برنامه شما براساس آن مدل کامپایل شود