[Ipopt] Jipopt Java interface
Edson Valle
edsoncv at enq.ufrgs.br
Sat Apr 19 08:28:51 EDT 2008
Dear all
The pointer must be pointed to NULL before the deletion (JVM/JNI things).
JNIEXPORT void JNICALL Java_org_coinor_Ipopt_FreeIpoptProblem
(JNIEnv *env,
jobject obj_this,
jlong pipopt){
// cast back our class
Jipopt *problem = (Jipopt *)pipopt;
if(problem!=NULL){
problem = NULL;
delete problem;
}
}
that's it
Edson Valle
edsoncv at enq.ufrgs.br
Citando Rafael de Pelegrini Soares <rafael at vrtech.com.br>:
> Dear Edson,
>
> I don't think this is the source of the problem you've experienced,
> because the Jipopt object is store in a raw pointer. No smart pointer is
> used there (around line 600 of Jipopt.cpp):
>
> /* create the IpoptProblem */
> Jipopt* problem=new Jipopt(env, obj_this, n, m, nele_jac, nele_hess,
> index_style);
>
>
> Once no smart pointer is used to store the object a regular 'delete'
> should be used to destroy it.
>
> Hope this helps.
> Regards.
>
>
> On Fri, 2008-04-18 at 14:06 -0300, Edson Cordeiro do Valle wrote:
>> Hello all
>> I took a look at the Java Native Interface and I found the
>> following function:
>>
>> JNIEXPORT void JNICALL Java_org_coinor_Ipopt_FreeIpoptProblem
>> (JNIEnv *env,
>> jobject obj_this,
>> jlong pipopt){
>> // cast back our class
>> Jipopt *problem = (Jipopt *)pipopt;
>>
>> if(problem!=NULL){
>> delete problem;
>> }
>> }
>>
>> I don't think it is necessary since the smartpointers automatically
>> cleans the unused references as stated in the documentation:
>>
>> " As the SmartPtrs go out of scope, the reference count
>> will be decremented and the objects will automatically
>> be deleted."
>>
>> The calling to this function from java leads the Java Virtual Machine to
>> crash, so I suggest this function removal.
>>
>> Regards
>>
>
>
More information about the Ipopt
mailing list