有人知道为什么在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:无效地址或传递给dlfree
  • 的损坏块0x63647000的地址
  • A / libc:致命信号11(SIGSEGV)位于0xdeadbaad(code = 1),线程7148(Thread-4888)

  • 我正在使用Superpowered SDK通过android应用进行离线处理。感谢您的帮助。

    最佳答案

    似乎是SDK中的错误。对SuperpoweredReverb使用小于等于1024的缓冲区大小,直到固定为止。
    参见https://github.com/superpoweredSDK/Low-Latency-Android-Audio-iOS-Audio-Engine/issues/168

    10-06 09:02