Stack Overflow in C function call - MS Visual C++ 2010 Express

Я написал функцию на 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 памяти на стеке?

Я в полной растерянности. Любая помощь будет высоко оценена.

Заранее спасибо.

5
задан xenodevil 3 February 2012 в 11:13
поделиться