2016-09-19 2 views
1

Кто-нибудь знает, почему я получаю 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: Fatal сигнала 11 (SIGSEGV) в 0xdeadbaad (код = 1), резьба 7148 (Thread-4888)

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

+0

Вы знаете, что ваш буфер ввода содержит недопустимые поплавки? Не уверен, что это проблема, но я бы добавил в нее некоторые действительные значения. –

+0

Или 'float * buffer = new float [size * 2] {};' для инициализации float до 0. Или вызов 'superpoweredReverb-> process (nullptr, buffer, size)' – kfsone

+0

Кроме того, это ваш фактический код или это псевдо-макет того, что делает ваш реальный код? То есть действительно ли проблема проявляется с размещенным точным кодом? – kfsone

ответ