Я согласен с Джеймсом в том, что распределение этих больших массивов в стеке, скорее всего, является причиной. Тем не менее, каждый PclImage
составляет всего около 6Meg каждый. Если вы не работаете в среде с ограниченной памятью, это должно быть выполнимо. Я выделил гораздо большие массивы в стеке раньше. Даже на встроенных системах.
Предложение Джеймса об использовании malloc
, вероятно, исправит это (стоит попробовать просто проверить проблему). Однако я считаю хорошей политикой избегать динамического распределения, когда это возможно. Возможными альтернативами malloc было бы объявление массивов во внешнем контексте или увеличение размера стека вашего потока. Созданные пользователем процессы и / или потоки часто имеют довольно маленькие стеки, выделенные им по умолчанию. Это может быть довольно простой вопрос, чтобы найти, где это установлено и дать ему достаточно большой стек для ваших нужд.
Например, если он запускается из потока, созданного с помощью процедуры Windows CreateThread()
, второй параметр управляет размером стека. Если вы по умолчанию используете 0
(как это делают большинство людей), он принимает размер стека по умолчанию. Насколько я могу судить, это "только" 1 МБ.