Я написал функцию на C, которая при вызове немедленно приводит к переполнению стека.
Прототип: void dumpOutput( Settings *, char **, FILE * );
Вызывающая линия: dumpOutput( stSettings, sInput, fpOut );
На момент вызова stSettings
уже является указателем на структуру Settings
, sInput
является динамически размещаемым двумерным массивом, а fpOut
является FILE *
.Он доходит до вызывающей линии без каких-либо ошибок, утечек памяти и т. Д.
Реальная функция довольно длинная, и я думаю, что ее не стоит разделять здесь, так как переполнение происходит, когда код входит в функцию.(я думаю, это называется прологом)
Я пытался вызывать ту же функцию напрямую из main()
с фиктивными переменными для проверки, есть ли какие-либо проблемы с переданными аргументами, но все равно выбрасывает условие переполнения стека.
Ошибка возникает из chkstk.asm
при вызове функции.Этот asm-файл (согласно присутствующим в нем комментариям) пытается проверить стек, чтобы проверить / выделить память для вызываемой функции.Он просто продолжает переходить к части Find next lower page and probe
до тех пор, пока не произойдет переполнение стека.
Локальные переменные в dumpOutput
также не являются зверями памяти, только 6 целых и 2 указателя.
Используемая памятькод в точке входа в эту функцию равен 60 936 КБ, которая увеличивается до 61 940 КБ в момент, когда происходит переполнение стека.Большая часть этой памяти уходит в sInput
.Это причина ошибки?Я так не думаю, потому что передается только его указатель.Во-вторых, я не понимаю, почему dumpOutput
пытается выделить 1004 КБ памяти в стеке?
Я в полном недоумении.Любая помощь будет высоко оценена.
Заранее спасибо.