Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Большие массивы в C++Builder


Автор: abrek 2.3.2004, 15:35
Создаю двумерный массив типа:
double[200][200], с ним можно нормально работать. Увеличиваю размерность до double[300][300] - вылезает ошибка о переполнении стека. Что это за фича? Как ее обойти? И вообще, чем определяется максимально-возможная размерность статического массива?
Заранее благодарен...

Автор: Crait 2.3.2004, 16:04
Да ты его, видать, в функцию по значению передаешь.
Передавай ссылку.

Автор: abrek 2.3.2004, 17:28
Ну, да в функцию. А как его передать по ссылке? Пробовал так:
func(**massiv)
Не прокатывает - пишет, что не может конвертировать double*[300] в double**.(или наоборот - не помню сейчас). Была мысль сакать указателем по одномерному массиву как будто он двумерный, но это для меня пока сложновато - я только начинаю изучать язык, да и дальнейшие расчеты наверное усложнит. Мне ведь надо находить определитель этого массива-матрицы.
Так как же мне быть?

Автор: maxim1000 2.3.2004, 17:32
можно, например, объявить double[300*300]
доступ будет с таким индексом: [300*y+x]
а вообще нехорошо объявлять большие массивы, лучше использовать динамическое выделение памяти: оно для этого предназначено

Автор: Borisff2003 3.3.2004, 07:07
Проблема не в том, что ты его передаешь в функцию(массивы передаются как указатели, а не по значению!), а как ты его оъявляеш.
void a{
double d[300][300];
}
Вызывает переполнение стека, так как статические переменные храняться в стеке, а он у тебя не бесконечный!
Попробуй динамическое выделение или vector.

Автор: podval 3.3.2004, 10:17
Делай примерно так:

Код

double **X;       // объявляем n-by-m матрицу
X = new double* [n];

for(i = 0; i < n; i++)
{
    X[i] = new double [m];
}

...

My_function(X, n, m); // предаем в функцию

...

for(i = 0; i < m; i++)       // освобождаем
{
    delete[] X[i];
}

delete[] X;


Внутри функции можешь работать с X[i][j], как нравится.

З.Ы. Можешь поверить, у меня матрицы достаточно большие smile.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)