Добрый вечер, thirteenth! А всё от того, что область памяти, отведённая на хранение переменных, имеет ограниченный объём. А именно 65535 байт. Учитывая тот факт, что одна переменная типа Integer занимает в памяти 2 байта, а в массиве 1000х1000 таких переменных будет 1000000, и проведя несложные подсчёты в уме получаем 2000000 байт. Именно столько будет занимать массив типа Integer, а на мой взгляд это несколько больше чем 65535 :) Если Вы всё-таки хотите создать такой большой массив, то без динамического распределения данных Вам не обойтись. В таком случае станет возможным использовать всю имеющуюся на компе память (это в идеале с использованием определённых библиотек, на сколько я помню, а в реальности станет доступно где-то 300-400 Кб, но и это меньше, чем требуется). Короче говоря столь немаленький массив без труда сделать не получится. Попробуйте шаблончик
из приложения. Это и ответ на прошлый вопрос и попытка решить новую проблему. Удачи :)
Приложение: Ответ отправлен: 11.02.2004, 20:34 Отправитель: Strory Отвечает _vt
Добрый день, thirteenth! Потому как под такую переменную необходимо как минимум 1000*1000*2=2Мб, а максимально Паскаль может выделить 64кБ на переменные и 64 кБ на код. Для решения проблемы, надо использовать динамические переменные или Паскаль под Windows =)
--- E-Man 1.5+ : Sorry for terrible english. My native language is C++
Ответ отправлен: 10.02.2004, 21:06 Отправитель: _vt Отвечает Pawel
Приветствую Вас, thirteenth! Советую читать сообщения компилятора! Pascal не может выделить память под матрицу таким размером(примерно 2,5 Mb). Нужно либо разбить её на несколько массивов либо выделять память ручками.
Ответ отправлен: 10.02.2004, 21:11 Отправитель: Pawel Отвечает Andy
Доброе время суток, thirteenth! Можно было программу и не писать, просто спросил почиму нельзя задать массив integer 1000 на 1000 и всё... Да потому, что: 1. Смотрим в хелпе сколько байт занимает тип integer(16 бит = 2 байта). 2. Умножаем 1000*1000*2 = 2000000. А размер непрерывного блока данных, как ты знаешь, в реал моде не может занимать более 65536 байт. Ответ отправлен: 11.02.2004, 06:19 Отправитель: Andy Отвечает Boriss
Добрый день, thirteenth! Общий размер данных не может превысить 65535 байт. Ограничение это можно обойти с помощью динамической памяти А у Вас сколько: 1000*1000*2 = ? Ясно? Ответ отправлен: 11.02.2004, 07:56 Отправитель: Boriss Отвечает vitya
Здравствуйте, thirteenth!
Памяти не хватит. Сегмент данных в паскале 64kb, а ты хочешь ~2 мегабайт данных. Выделяй в динамической памяти массив. Ответ отправлен: 11.02.2004, 08:50 Отправитель: vitya Отвечает sir henry
Здравствуйте, thirteenth! Потому что массив в старом досовском паскале должен занимать размер не более 64 кБ. Если массив должен быть больше, то пользуйтесь или связанными списками, или коллекциями. Ответ отправлен: 11.02.2004, 08:59 Отправитель: sir henry Отвечает Ayl
Здравствуйте, thirteenth! Потому что для ДОСа размер сегмента данных ограничен 64К. А в реале максимальный размер переменной не может превышать размера 65520 байт. А размер массива array [1..1000, 1..1000] of Integer составляет 1000*1000*2 байт = 2000000 байт, что чуть меньше 2Мб, но значительно больше 64Кб.
Ответ отправлен: 11.02.2004, 11:15 Отправитель: Ayl Отвечает samum2000
Добрый день, thirteenth! Потому что суммарный размер твоей структуры составит 2000000 байт, а максимально допустимый в паскале размер - 65535 байт (65кБ). Остается только довольствоваться матрицей 180х180, или начинать работать с динамической памятью. Ответ отправлен: 11.02.2004, 13:18 Отправитель: samum2000 Отвечает Vitally
Добрый день, thirteenth! Тысяча элементов по тысяче элементов = 1000000. Integer = 2 байта. Итого - 2 миллиона байт. Максимальный размер, который Борланд может выделить под 1 массив = 65536 байт (однако Борланд рекомендует использовать 65528). Вот и все. Просто не хватает памяти.
Ответ отправлен: 12.02.2004, 01:12 Отправитель: Vitally Отвечает Tancho
Доброе время суток, thirteenth! Потому что в Borland(Turbo) Pascal'e под DOS для объявление переменных и массивах отводиться всего один сегмент ( 65536) ячеек памяти, кроме того переменные Integer занимает 2 байт памяти, а 1000 х 1000 х 2 = 2 000 000 байть в несколько раза больше чем имееться в разположеннии и поетому компилатор даеть сообщение о ошибке! Ответ отправлен: 12.02.2004, 13:26 Отправитель: Tancho
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.