1

有人知道为什么我会在 superpoweredReverb 对象被删除后立即得到一个 SIGSEGV 吗?

int size = 3056;
SuperpoweredReverb* superpoweredReverb = new SuperpoweredReverb(44100);
superpoweredReverb->enable(true);
float* buffer = new float[size * 2];
superpoweredReverb->process(buffer, buffer, size);
delete(superpoweredReverb); // <-- error SIGSEGV
delete[](buffer);

如果大小为 16、32、64 或 1024,则一切正常。但是通过使用其他 8 的倍数,例如 1032、2048 或 4096,我会收到以下错误消息:

  • A/libc: 无效地址或损坏块 0x63647000 的地址传递给 dlfree
  • A/libc:致命信号 11 (SIGSEGV) 位于 0xdeadbaad (code=1),线程 7148 (Thread-4888)

我正在使用 Superpowered SDK 通过 android 应用程序进行离线处理。如果有任何帮助,我将不胜感激。

4

1 回答 1

2

似乎是sdk中的一个错误。对 SuperpoweredReverb 使用 <= 1024 的缓冲区大小,直到它得到修复。见https://github.com/superpoweredSDK/Low-Latency-Android-Audio-iOS-Audio-Engine/issues/168

于 2016-09-26T10:29:56.240 回答