Вы получаете исключение, потому что, безусловно, eax
содержит значение, которое не является адресом области памяти для записи.
Итак, вопрос в том, почему эта инструкция была выполнена. Вот подсказка:
Машинный код для инструкций add dword ptr[eax], eax
это 01 00
.
То есть неожиданное выполнение этих инструкций обычно означает, что вы случайно выполнили некоторые данные (например, 32-битная константа '1').
Это обычно происходит из-за переполнения буфера или стека в вашем коде или вызова функции по указателю, который не был назначен должным образом.
Проверьте доступ к массиву и вызовы указателей функций.