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