fix: sample SIGSEGV — free() cast to wrong callback signature
Root cause: JS_NewArrayBuffer's free callback takes 3 args
(JSRuntime *rt, void *opaque, void *ptr) but we cast plain free()
which takes 1 arg. When QuickJS GC'd the ArrayBuffer, it called
free(rt_pointer) instead of free(data_pointer) — instant SIGSEGV.
Fix: proper js_free_array_buffer wrapper that ignores rt/opaque
and calls free(ptr).
This bug existed since getData() was first written and crashed
100% of the time when the returned Float32Array was GC'd.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>