Я воспользуюсь своими навыками психической отладки и скажу, что вы перезаписываете буфер, который находится в стеке - в частности, вы записываете слишком много нулей в буфер, который недостаточно велик для его хранения.
У вас есть классические симптомы разбитого стека - первый AV, который вы ударили, пытается получить доступ к нулю минус несколько байтов - явно смещение от вашего указателя стека на ваши параметры или ваши локальные переменные. (Я никогда не могу вспомнить, какие из них находятся выше указателя стека, а какие - ниже.) Затем у вас есть несколько строк, которые указывают, что указатель инструкции был установлен на ноль, что часто происходит потому, что адреса возврата функций в кадрах стека имеют был перезаписан с нулевыми значениями - потому что вы перезаписали буфер на основе стека и повредили все другие важные вещи в стеке. Когда ваша программа пытается вернуться из текущей функции, она смотрит в стек, чтобы увидеть, откуда она думает, откуда она появилась, видит ноль и сразу же переходит туда. Упс!
Поскольку ваш стек перегружен, вы можете не найти трассировку стека слишком полезной; ваши фреймы стека могут быть повреждены этой точкой.