Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Как купить рекламу на форуме


Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 07.01.2008, 20:55   #1
graphoman
 
Регистрация: 23.12.2007
Сообщений: 3
По умолчанию Переполнение стека при передачи функциям массивов большой размерности

При передачи функции массива большой размерности (около 3 mb) вызывается исключение: SteckOverflow

Как этого избежать?
graphoman вне форума Ответить с цитированием
Старый 07.01.2008, 21:08   #2
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Сделать массив глобальным для этой функции и не передавать через стек
_Dmitry вне форума Ответить с цитированием
Старый 07.01.2008, 21:47   #3
Ins
Форумчанин
 
Регистрация: 29.12.2007
Сообщений: 137
По умолчанию

Ну еще бы... Где это видано, чтобы массивы такого размера так прямо параметрами в подпрограмму передавали... Мало того, что переполнение стека может вызвать, так еще сколько времени копирование его в стек займет - страшно подумать. УКАЗАТЕЛЬ на массив передавать надо, это всего-навсего 4 байта, стек не переполнит. Для этого либо явно пропишите тип параметра - указатель, и передавайте при вызове адрес массива, либо просто объявите его как var-параметр (передача по ссылке. В этом случае указатель вместо самого массива будет передан неявно автоматически). Ну, т.е. если у вас подпрограмма выглядит как-нибудь так:
Код:
type
  TMyArray = array[1..X] of XXX;
procedure MyProc(A: TMyArray);
сделайте либо так:
Код:
type
  PMyArray = ^TMyArray;
  TMyArray = array[1..X] of XXX;
procedure MyProc(A: PMyArray);
либо так:
Код:
procedure MyProc(var A: TMyArray);
Ins вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме 20000 рублей в месяц

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с рекурсивным закрашиванием. Переполнение стэка. prost Помощь студентам 7 02.06.2008 22:34
массивы, переполнение при делении Alter Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 21.05.2008 20:11
Переполнение при возведении в степень ruPy Общие вопросы Delphi 1 01.02.2008 19:21
Вычислить произведение элементов каждого столбца матрицы размерности n*n, находящаяся в строках ZmeI Помощь студентам 2 17.12.2007 22:43
Заполнить одномерный целочисленный массив размерности n числами, введёнными с клавиатуры AHTOXA Помощь студентам 4 06.06.2007 18:24


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS