блин, такая ситуация, в общем Emscripten при аллокации бОльшего количества памяти (realloc) полностью заменяет HEAP на другой объект, а я хочу заранее сохранить ссылки на HEAP в нужных местах где я заллочил память. или так вообще нельзя делать? при realloc они считайте все невалидные
Так везде. Потому что в такоем случае realloc или malloc может дернуть memory.grow который детачит ArrayBuffer в HEAP на стороне браузера/ноды. Есть два выходы. Каждый раз ретачить после такого вызова AB снова:
exports.callWhichUseRealloc();
HEAP8 = new Uint8Array(exports.memory.buffer) // restore array buffer for HEAP8
Или всегда копировать / слайсить результат (если это массив) до этого вызова:
const arrView = exports.callMethodWhichReturnArray();
const arr = arrView.slice();
exports.callWhichUseRealloc();
…
// safely use «arr». But not arrView