Сбой при вызове функции в Android NDK - PullRequest
1 голос
/ 10 октября 2011

Я разрабатываю проект на базе Android, для которого требуются некоторые компоненты для запуска через NDK, потому что я использую код, уже написанный на C. У меня очень странная проблема, когда программа вызывает сбой при вызове определенной функции:

numin_read(ns,values+data_spec->N_inputs*i+j0);

ns - указатель на структуру, а значения - указатель на двойной массив, остальное - просто целочисленное смещение, все из которых действительны (ns уже использовалсявремя, когда эта функция вызывается, и вызов malloc проверяется на NULL-указатель).Функция находится в другом файле * .c (numin.c), и ее объявление (в numin.h): void numin_read (numin_source *, double *);

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

Я изо всех сил пытаюсь заставить отладчик присоединиться к программе (несмотря на все описанное здесь ) поэтому я действительно понятия не имею, что там происходит.У кого-нибудь есть идеи, почему это не работает?Я использовал этот код в Linux, и он отлично работает.

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

Редактировать: я не знаю, если это имеет значение, но для сборки программы я собираю каждый из отдельных файлов c в ряд объектных файлов(используя автономный набор инструментов NDK), заархивируйте эти объектные файлы в архивный архив и затем вызовите его как PREBUILT_STATIC_LIBRARY при превращении основного файла c в разделяемую библиотеку, которую я вызываю через NDK ...

РедактироватьЭто странно.Я изменил определение numin_read на void numin_read() и закомментировал весь код, кроме одного оператора return.По сути, я вызываю функцию, которая не принимает никаких параметров и просто возвращает ... и все равно вылетает!Мне удалось получить что-то из LogCat: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000004 Насколько я понимаю, это связано с распределением памяти?Но я не искажаю, я вызываю только функцию ... Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 11 октября 2011

Не самый яркий момент для меня: файлы .h, которые я использовал для создания окончательной общей библиотеки NDK, не были символическими ссылками на исходные файлы .h, которые я использовал для создания объектных файлов. Это означало, что любые изменения, которые я внес в тех, через кого не были распространены ... все равно нужно проверить, что теперь все в порядке, но извините за трату вашего времени ...

0 голосов
/ 10 октября 2011

Выражение

values+data_spec->N_inputs*i+j0

совпадает с

values[data_spec->N_inputs * i + j0]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...