
Другие языки программирования и технологии
Что означает ошибка в Паскале
Есть функция, которая находит минимальный элемент матрицы. Синтаксис правилен. Но когда компиллируется, выдает ошибку Stack Overflow Error на слове begin в функции. Что означает эта ошибка (не перевод, а что она значит), где опасное место и как с этим бороться???

Паскаль при вызове процедур/функций память под параметры, локальные переменные и возвращаемые значения выделяет в стеке. Количество памяти под стек ограничено и составляет по умолчанию 16Кб ( меню Options|Compiler|Memory Sizes... ). При таком способе описания function fmin(x:mat; i,j:word):real; при вызове функции вся память выделенная под переменную a копируется в стек ( передача по значению ), а это только для параметра x - 100*100*4=40000 байт. Понятно что переполнение стека обеспечено.
Как бороться - уже было написано - передавать параметры по ссылке ( var ) или выделять память для больших переменных динамически и работать с указателями ( это касается и локальных переменных функции) .
Переполнение стека также может возникать при длинных рекурсиях (когда функция/процедура вызывает саму себя много много раз).
Как бороться - уже было написано - передавать параметры по ссылке ( var ) или выделять память для больших переменных динамически и работать с указателями ( это касается и локальных переменных функции) .
Переполнение стека также может возникать при длинных рекурсиях (когда функция/процедура вызывает саму себя много много раз).
Как уже говорили, поправить в ф-ции fmin передачу массива по ссылке, а не по значению.
Однако размер стека, выделяемый программе, можно увеличить директивой компилятора
{$M 65520,131072,655360}
Здесь первое число -- размер стека (по умолчанию 16384), второе - минимальный размер доступной памяти для динамических переменных (0..655360), третье - наибольший размер этой памяти (д. б. больше или равно второму числу) .
Эту директиву нужно поместить в начало программы, в Unit-ах она игнорируется.
Однако размер стека, выделяемый программе, можно увеличить директивой компилятора
{$M 65520,131072,655360}
Здесь первое число -- размер стека (по умолчанию 16384), второе - минимальный размер доступной памяти для динамических переменных (0..655360), третье - наибольший размер этой памяти (д. б. больше или равно второму числу) .
Эту директиву нужно поместить в начало программы, в Unit-ах она игнорируется.
попробуй поменять
function fmin(x:mat; i,j:word):real;
на
function fmin(var x:mat; i,j:word):real;
Передавать массивы по значению не есть гуд.
function fmin(x:mat; i,j:word):real;
на
function fmin(var x:mat; i,j:word):real;
Передавать массивы по значению не есть гуд.
переполнение стэка. . используй динамическое выделение памяти под матрицу !
стучи в агент
Похожие вопросы
- 207 ошибка (Турбо паскаль)
- Что означает ошибка: "отказано в доступе",и как её исправить?
- Найдите ошибку в Паскале? Что я сделал не так? И напишите ка нужно правильно.
- подскажите пожалуйста. что может означать ошибка синего экрана 0х00000050 (0xbad0b148,0x00000000,0x805d729,0x000000000)
- Где ошибка Паскаль задача счастливый билет
- Помогите найти ошибку в несложной программке на Паскале
- Помогите найти ошибки в коде (паскаль)
- Информатика.Практическая работа по паскалю.ПОМОГИТЕ.Все нужно ввиде паскаля.мучаюсь целый день.постоянно какие-то ошибки
- Владеющие паскалем! SOS! Найдите пожалуйста ошибку!((( думаю уже долго, ошибку найти не могу(((Помогите пожалуйста!!!
- Турбо паскаль пожалуйста укажите ошибки