Co by mohlo způsobit SIGSEGV při volání NewObjectArray pro JNI v Androidu?

hlasů
6

Jen jsem začal pracovat s Android NDK ale Dostávám SIGSEGV když mám tuto výzvu v mém C kód:

jobjectArray someStringArray;
someStringArray = (*env)->NewObjectArray(env, 10, 
(*env)->FindClass(env,java/lang/String),(*env)->NewStringUTF(env, ));

Základny na všechny příklad mohu najít, výše uvedený kód je správný, ale neustále se mi SIGSERGV a vše je v pořádku, pokud je linka NewObjectArray je mimo komentář. Nějaký nápad, co by mohlo způsobit takový problém?

Položena 21/01/2010 v 23:05
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
5

že vypadá dobře, takže hádám, že jste udělali něco jiného špatného. Předpokládám, že vedete s checkjni dál? budete chtít zlomit, že až na několik řádků: dělat FindClass a zkontrolovat návratovou hodnotu, proveďte NewStringUTF a zkontrolovat návratovou hodnotu, a pak volat NewObjectArray.

btw, možná budete chtít předat NULL jako poslední argument; Tento vzor pomocí prázdný řetězec jako výchozí hodnotu pro každý prvek pole se běžně používá (myslím, že je zkopírovat a vložit z nějakého dokumentace Sun a se rozšířil odtamtud), ale to je zřídka užitečné, a to je trochu plýtvání. (A to neodpovídá chování „new String [10]“ v Javě).

Odpovězeno 23/01/2010 v 22:34
zdroj uživatelem

hlasů
2

Myslím, že jeden z možných příčin je to, že v dlouhodobou metodou JNI VM přeruší, když dochází k na-metodou-vyvolání místní referenční drážek (normálně 512 slotů v Android).

Vzhledem k tomu, funkce FindClass () a NewStringUTF () by přidělit místní odkazy, pokud si pobyt v metodě JNI po dlouhou dobu, VM neví, zda určitý lokální reference by měly být recyklovány nebo ne. Takže byste měli explicitně volat DeleteLocalRef (), aby se uvolnily získané lokální reference, když není potřeba už ne. Nemáte-li to, bude „zombie“ místní odkazy zabírat sloty ve VM a VM přeruší při běhu ze všech místních referenčních slotů.

V krátkém období metody JNI, nemusí to být problém v důsledku všech místních odkazy by být recyklovány při odchodu z metody JNI.

Odpovězeno 12/08/2011 v 20:32
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more