SIGSEGV с SuperpoweredReverb

Кто-нибудь знает, почему я получаю SIGSEGV, как только объект superpoweredReverb удаляется?

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 (код = 1), поток 7148 (Thread-4888)

Я использую Superpowered SDK для автономной обработки с помощью приложения для Android. Буду благодарен за любую помощь.


person Sebastian    schedule 19.09.2016    source источник
comment
вы знаете, что ваш входной буфер содержит недопустимые поплавки, не так ли? Не уверен, что это проблема, но я бы поставил в нем несколько допустимых значений.   -  person Jean-François Fabre    schedule 19.09.2016
comment
Или float* buffer = new float[size * 2] {}; для инициализации поплавков до 0. Или вызовите superpoweredReverb->process(nullptr, buffer, size)   -  person kfsone    schedule 19.09.2016
comment
Кроме того, это ваш реальный код или это псевдо-макет того, что делает ваш реальный код? т.е. действительно ли проблема проявляется с точным опубликованным кодом?   -  person kfsone    schedule 19.09.2016
comment
Почему все используют new, особенно для вещей, которые абсолютно не нужны, таких как SuperpoweredReverb? Похоже, вы пишете код на Java, а не на C++. SuperpoweredReverb superpoweredReverb(44100); это все, что вам нужно.   -  person PaulMcKenzie    schedule 19.09.2016
comment
Спасибо за хорошие советы, но они не решили проблему. Когда я не использую new/delete, я получаю ту же ошибку, как только функция возвращается. Я открыл новую проблему на github: github .com/superpoweredSDK/ Надеюсь, создатели SDK знают об этом. @kfsone: это не мой настоящий код, но выполнение приведенного выше примера кода приводит к той же ошибке.   -  person Sebastian    schedule 20.09.2016


Ответы (1)


Кажется, это ошибка в SDK. Используйте размеры буфера ‹= 1024 для SuperpoweredReverb, пока это не будет исправлено. См. https://github.com/superpoweredSDK/Low-Latency-Android-Audio-iOS-Audio-Engine/issues/168

person Sebastian    schedule 26.09.2016