Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];

Вниз

Проблема с выделением памяти под большой массив   Найти похожие ветки 

 
-Mouse-   (2007-09-27 20:23) [0]

Добрый день ув. мастера. Столкнулся с такой проблемой:
При запуске кода с такой строчкой
ResIndexes : array [1 .. 2000] of array [1 .. 3500] of Integer;
пишет:
Project Test.exe raised exception class EStackOverflow with message "Stack OverFlow".

Попытка указать (Project->Options->Linker->MaxStackSize) большее количество используемой памяти приводит к сообщению:
Max stack size must be an Integer between 65536 and 16777216

А мне получается под массив надо 28 метров памяти. Подскажите пожалуйста как заставить работать такую программу?
Заранее спасибо.


 
vpbar ©   (2007-09-27 20:33) [1]

создайте массив динамически


 
vpbar ©   (2007-09-27 20:38) [2]

var a:array of array of integer;
   i:integer;
begin
SetLength(a,2000);
for i:=Low(a) to  High(a) do    SetLength(a[i],3500);
a[1000,3000]:=100; // test
end


 
Kolan ©   (2007-09-27 20:46) [3]

> SetLength(a,2000);

SetLength(a,2000,3500);


 
vpbar ©   (2007-09-27 20:49) [4]

хм. незнал. во как полезно справку всю читать


 
-Mouse-   (2007-09-27 21:13) [5]

Большое спасибо.


 
Anatoly Podgoretsky ©   (2007-09-27 21:23) [6]

> -Mouse-  (27.09.2007 20:23:00)  [0]

Не передавай через стек, или ссылка на массив, или динамический массив, что и будет ссылкой.


 
vpbar ©   (2007-09-27 22:36) [7]

>>Anatoly Podgoretsky ©   (27.09.07 21:23) [6]
А при чем тут ПЕРЕДАЧА через стек? Вот в этом коде передачи вроде нет, а переполнение есть.
procedure TForm1.Button1Click(Sender: TObject);
var a:array[0..2000] of array[0..4000] of integer;
begin
a[1000,1000]:=10;
end;
Тогда уж такой совет "не размещай на стеке";

ЗЫ Как то непривычно спорить с таким мастаком. Кажется что я не прав, но всеже .... истина дороже.


 
Anatoly Podgoretsky ©   (2007-09-27 23:23) [8]

> vpbar  (27.09.2007 22:36:07)  [7]

На конкретный код могу сказать конкретно - в данном случае массив размещен на стеке.
Нечего делать большим объектам в стеке.
Понимай не передавай через стек относится и к размещению.


 
Jeer ©   (2007-09-28 14:28) [9]


> vpbar ©   (27.09.07 20:49) [4]


Справку всегда полезно читать, тем более что твой вариант тоже может быть полезен:

var a:array of array of integer;
//
 SetLength(a,2000);

 for i:=0 to  100 do
    SetLength(a[i],3500);

 for i:=1000 to  1100 do
    SetLength(a[i],3500);

В этом случае создается плотный двумерный массив (not rectangular), в отличии от SetLength(a,M,N).


 
Kolan ©   (2007-09-28 15:13) [10]

> В этом случае создается плотный двумерный массив (not rectangular)
> , в отличии от SetLength(a,M,N).

Что значит плотный массив?


 
Anatoly Podgoretsky ©   (2007-09-28 15:22) [11]

> Kolan  (28.09.2007 15:13:10)  [10]

Значить не прямоугольный, а ровно столько, сколько нужно в данной строке массива.


 
Anatoly Podgoretsky ©   (2007-09-28 15:23) [12]

> Anatoly Podgoretsky  (28.09.2007 15:22:11)  [11]

Кстати если врубиться в суть, то окажется что это не массив, массив как раз одномерный, а каждый элемент массива содержит в себе другой массив. Мозги сразу прояснятся.


 
Kolan ©   (2007-09-28 16:11) [13]

> Кстати если врубиться в суть

В суть я врубаюсь.

Не обратил внимание на:
for i:=0 to  100 do
   SetLength(a[i],3500);

for i:=1000 to  1100 do
   SetLength(a[i],3500);



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.045 c
1-1190551948
Илья_С
2007-09-23 16:52
2007.12.16
прокрутка ListView


2-1195575763
Angela
2007-11-20 19:22
2007.12.16
Edit в MSExcel


2-1195649367
{ент
2007-11-21 15:49
2007.12.16
List box


2-1195478128
bagos
2007-11-19 16:15
2007.12.16
Надругатсья над scroll ом :)


1-1190269966
rtm
2007-09-20 10:32
2007.12.16
Ошибка при сохранении вордовского документа





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский