_
но мне всё равно не понятно, как могло выйти так, что на компиляторе C++ работает, а в wasm нет
Легко. WebAssembly делает многие UB С++ ошибкой, а записть за пределами массива может никак не проявляться в C++, а в wasm может вызвать исключение как в твоем случае (если программа попытается записать за пределами линейной памяти)