Intereting Posts
Изменение шрифта текста табуляции в поддержку дизайна Android. TabLayout Ошибка «id не может быть разрешена или не поле»? База данных Android повреждена, но ее можно открыть в SQLite Manager. Извлекаемые? Понимание onTrimMemory (int level) Не удалось прочитать дескрипторы файла входного канала из пакета Android: установить только одно текстовое дополнение Zipalign tool не был найден в sdk Android: «Не удалось выполнить« воспроизведение »в« HTMLMediaElement »: API может быть инициирован только жестом пользователя Как заставить AccountManager отображать экран «Запрос доступа» после того, как пользователь уже разрешил доступ? Использование Enums в качестве пользовательских атрибутов XML Как скрыть представление программно? Тест, если кнопка запускает новую активность в андроиде junit (pref без robotium)? Как удалить список всех элементов Получение всех элементов из ArrayAdapter Сделайте анимацию активности сверху донизу

Недопустимый адрес кучи и фатальный сигнал 11

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

@@@ ABORTING: INVALID HEAP ADDRESS IN dlfree Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1) 

Иногда code=2 , но всегда Fatal signal 11 и invalid heap address .

Я попытался выяснить, что это значит и как это исправить. Эта тема была наиболее полезной ; Однако у меня все еще нет решения.

Ошибка возникает, когда я запускаю несколько AsyncTasks для загрузки нескольких изображений.

Это моя основная AsyncTask

 public class FetchArtistImages extends AsyncTask<Void, Integer, String[]> implements Constants { private final WeakReference<Context> contextReference; public FetchArtistImages(Context context) { contextReference = new WeakReference<Context>(context); } @Override protected String[] doInBackground(Void... params) { String[] projection = new String[] { Audio.Artists._ID, Audio.Artists.ARTIST }; String sortOrder = Audio.Artists.DEFAULT_SORT_ORDER; Uri uri = Audio.Artists.EXTERNAL_CONTENT_URI; Cursor c = contextReference.get().getContentResolver() .query(uri, projection, null, null, sortOrder); ArrayList<String> artistIds = new ArrayList<String>(); if (c != null) { int count = c.getCount(); if (count > 0) { final int ARTIST_IDX = c.getColumnIndex(Audio.Artists.ARTIST); for (int i = 0; i < count; i++) { c.moveToPosition(i); artistIds.add(c.getString(ARTIST_IDX)); } } c.close(); c = null; } return artistIds.toArray(new String[artistIds.size()]); } @Override protected void onPostExecute(String[] result) { for (int i = 0; i < result.length; i++) { new LastfmGetArtistImages(contextReference.get()).executeOnExecutor( AsyncTask.THREAD_POOL_EXECUTOR, result[i]); } super.onPostExecute(result); } 

Несмотря на то, что я пытался исследовать, что с этим, я все еще теряю, когда дело доходит до его исправления. Если у кого-то есть некоторое понимание, я определенно буду благодарен за это. Ошибка не вызывается каждый раз, когда я AsyncTasks свои AsyncTasks , но я не могу найти много шаблонов, чтобы помочь выделить, почему это происходит. Есть еще несколько потоков на SO о fatal signal 11 , но они не дают большой помощи в моем случае.

Solutions Collecting From Web of "Недопустимый адрес кучи и фатальный сигнал 11"

Я просто столкнулся с тем же вопросом и получил его в обновляемом состоянии. Это ошибка, которую я получал:

08-04 17: 37: 05.491: A / libc (4233): @@@ ABORTING: НЕВИДИМЫЙ АДРЕС HEAP В dlfree 08-04 17: 37: 05.491: A / libc (4233): Фатальный сигнал 11 (SIGSEGV) на 0xdeadbaad (код = 1)

То, к чему это сводилось, – вызов функции, созданный из двух разных потоков одновременно.

Более конкретно, эта функция была связана с методом close () BluetoothSocket.

Я проверил исходный код на этом веб-сайте , и звонок не синхронизирован (не уверен, что это изменилось, так как оно от Android 2.1).

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

Также вы пробовали не использовать THREAD_POOL_EXECUTOR? Согласно руководству android dev :

При первом вводе AsyncTasks выполнялись последовательно на одном фоновом потоке. Начиная с DONUT, это было изменено на пул потоков, позволяющий нескольким задачам работать параллельно. Начиная с HONEYCOMB, задачи выполняются в одном потоке, чтобы избежать общих ошибок приложений, вызванных параллельным выполнением.

Вчера у меня была такая же ошибка. Это всегда случалось, но не всегда последовательно. То, что вызвало это для меня, до сих пор не упоминалось.

Я думал, что у меня может быть аналогичная проблема, потому что я тоже занимаюсь потоками, однако я удалил все свои потоки, и проблема все еще возникала. Наконец, после множества операторов печати, я смог отследить его до класса, который у меня был, который имел указатель как частный член, но я забыл инициализировать указатель.

Позже, когда этот класс уничтожил его, он пытался удалить указатель, однако, поскольку указатель не был инициализирован NULL, он может иметь или не иметь некоторого значения для мусора, поэтому иногда это не вызовет сбоя и другие времена. Вероятно, потому что, когда значение мусора было местом памяти, которое не принадлежит мне или когда оно происходит, и я удаляю что-то важное, оно вызывает ошибку / ошибку.

Вот урезанный пример проблемы, с которой я столкнулся:

 class BadFoo { public: BadFoo() {} // BAD! We didn't initialize the pointer ~BadFoo() { if (myPtr) { delete myPtr; } } // OTHER MEMBER FUNCTIONS HERE private: int* myPtr; } class GoodFoo { public: GoodFoo() : myPtr(NULL) {} // GOOD! Can't be garbage value now ~GoodFoo() { if (myPtr) { delete myPtr; } } // OTHER MEMBER FUNCTIONS HERE private: int* myPtr; } 

Интересно отметить, что этот крах не произошел на моем Transformer Prime, но на моем Nexus4. Просто идет, чтобы показать, что мы должны тестировать на нескольких устройствах! Пока Nexus выигрывает, помогая мне отслеживать ошибки, поскольку это, кажется, много pickier.