2013-03-02 2 views
0

Matrixxd를 삭제하는 방법은 있습니까? 내가 사용하고 싶은 경우JNI의 Eigen에서 Matrixxd def를 삭제하는 방법

 delete 

이 오류가 컴파일

 Eigen::Matrix4d' argument given to 'delete', expected pointer 
    make.exe: *** 

말한다 : 내가 사용하고자 할 때 때문에

JNIEXPORT void JNICALL Java_com_jp_algi_CoreC_vector 
    (JNIEnv *env, jobject clazz, jfloatArray input){ 
jfloat* flt1 ; 
jsize size = env->GetArrayLength(input); 
jint i; 
jint j=0; 
jfloat* out ; 
Matrix4d C(400,400); 

//compute part 

    delete C; 

을 그리고 뭐죠 jdouble하지만 및 C + 더블의 차이점은 무엇입니까? 나는 하나도 없다고 생각한다. 따라서 J 데이터 유형은 코드의 주문에만 사용할 수 있습니까?

답변

0

우선, Matrix4d C(400,400);은 의미가 없습니다. Matrix4d는 4x4 매트릭스이므로 400x400 매트릭스로 리사이즈 할 수 없습니다.

두 번째로, 연산자 delete은 연산자 new에 의해 할당 된 메모리를 해제하는 데 사용됩니다. 귀하의 경우 매트릭스 C는 스택에 생성되며 C는 기본 메모리 할당/해제를 담당합니다.

그래서 당신이 실제로 동적 크기의 행렬, (즉, MatrixXd), 당신은 단순히 할당 된 메모리를 해제 0x0으로 크기를 조정할 수 있습니다 원하는 가정 :

MatrixXd C(400,400); 
// ... 
C.resize(0,0); 
// reuse C later 

나중에 C를 필요로하지 않는 경우를 블록을 사용할 수도 있습니다 :

{ 
    MatrixXd C(400,400); 
    // ... 
} 
// At this stage C has been automatically deleted.