PDA

View Full Version : سوال در مورد ارایه های بزرگ



admad2000
پنج شنبه 29 فروردین 1387, 11:34 صبح
سلام من یک سوال از اساتید داشتم که ممنون میشم اگر پاسخ دهند. من وقتی در c++ یک ارایه سه بعدی مثلا با ابعاد 100*200*50 تعریف میکنم به محض اجرای برنامه خطای stack overflow به وجود میاید و برنامه اجرا نمیشود. میخواستم بدانم چطور میشود حافظه تخصیص یافته به کامپایلر( 6++visual C)را اضافه کرد تا بتوان ارایه های بزرگتر را تعریف کرد. ایا راههای دیگری نیز برای تعریف ارایه های بزرگ وجود دارد؟ ممنون

Nima_NF
پنج شنبه 29 فروردین 1387, 17:33 عصر
از طریق منوی project به option یا properties پروژه بروید ، در آنجا به linker و در زیر شاخه system گزینه ای با نام stack reserves size وجود دارد که می توانید مثلا 20،000،000 بایت قرار دهید.

اما در هر حال این روش پیشنهاد نمی شود و بهتر هست از طریق تخصیص حافظه پویا این آرایه را تولید کنید:



int *x = new int[50*200*500];

// Do something

delete[] x;

و برای دستیابی به این شکل:



x[ 40 * 150 * 260 ] = 444;

ahmadnasiri2005
پنج شنبه 19 خرداد 1390, 13:51 عصر
با سلام
خسته نباشید. میشه لطف کنید پاسخ این سوال رابفرستید؟
برنامه ای که یک ماتریس 50*50 را تعریف کرده و مقادیر درون این ماتریس را با اعداد تصادفی پر کرده و سپس دترمینان این ماتریس را محاسبه کند؟( برنامه به زبان java باشد)

ali_m22
پنج شنبه 21 اردیبهشت 1391, 01:34 صبح
این روش درستی نیست، و خیلی Overlap داره، مثلا:

x[ 20 * 20 * 10]
x[ 10 * 20 * 20]
x[ 20 * 10 * 20]
x[ 10 * 200 * 2]

همه به یک نقطه اشاره می کنند، و همه معادل [x[4000 هستند.

یک روش برای این کار:

#include <vector>

const int nrows = 1000;
const int ncols = 1000;
std::vector<std::vector<int>> array;
array.resize(nrows);
for (int i = 0; i < nrows; i++)
{
array[i].resize(ncols);
}

برای مقداردهی:

array[i][j]=200;

موفق باشید.