Как решить Фатальный сигнал Android 11 (SIGSEGV), код 1, адрес ошибки 0x0 в tid xxxxx (Thread-X)? - PullRequest
0 голосов
/ 22 апреля 2019

Я использую Opencv SDK для Android для разработки обработки и сопоставления в реальном времени.

Основная логика свойств Opencv заключается в функции JNI.

Проблема в том, что иногда(только иногда) мое приложение вылетает без ошибок, поэтому я игнорировал проблему до тех пор, пока не закончил разработку алгоритма.

Я начал исследовать ошибку, и она определенно находится в части JNI.

Здесьэто ошибка, которую я получаю в Log

A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 27424 (Thread-8)
A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0

Я много искал в интернете и нашел это решение

<activity
   android:hardwareAccelerated="false" />

Оно работало 2 дня и теперь явозвращаю ту же ошибку.

В чем проблема и как я могу ее решить?

Любая помощь будет признательна и заранее благодарна.

РЕДАКТИРОВАТЬ

Я должен добавить, что мое приложение берет эталонное изображение из галереи и сравнивает его, используя Opencv, с изображением в реальном времени.

Если я выбираю изображение из галереи и приложение вылетает,это изображение не будет работать снова, и если я возьмуновое изображение или изображение, которое работало раньше, приложение работает нормально.

1 Ответ

1 голос
/ 24 апреля 2019

После некоторого обсуждения выяснилось, что проблема связана с взаимодействием с памятью:

extern "C" 
jdouble 
JNICALL Java_com_foo(JNIEnv *env, jclass type, jlong addrRgba, jlong addrGray) { 
  Mat &mRgb = *(Mat *) addrRgba;
  Mat &mGray = *(Mat *) addrGray;

  return (jdouble) toGray(mRgb, mGray);
}

В качестве быстрого исправления double toGray(Mat& rgb, Mat& gray); пришлось изменить на double toGray(Mat rgb, Mat gray)

Дополнительная информацияможно найти по теме CvMat deep copy

...