天天看點

env->FindClass()為NULL的一種解決辦法

用C加載虛拟機,FindClass()一直為NULL。這找不到還怎麼玩啊。于是上網搜尋,試了各種辦法并沒成功。

  FindClass()的類名字串,分隔符應該是/,這個不多說。

  後來看到别人的代碼寫法跟自己不一樣,于是改了一下,正确了。原因也明白了。

  • 錯誤 
char buffer[128] = {0};
sprintf(buffer, "-Djava.class.path=%s", jar);
options[0].optionString = buffer;
 
....      

這個buffer是臨時變量,傳遞過去之後,函數調用結束就釋放了,使用時就出錯了。吾以為會自行複制,實際上沒有。

  • 正确 
options[0].optionString = strdup(buffer);      

通過strdup()複制一份,因為是malloc的,隻要不釋放就能用。