0

宣言されたMatrixxdを削除するにはどうすればよいですか? 私が使いたいとき:

     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+ Double の違いは何ですか? 一つもないと思います。では、J データ型はコード内の順序にのみ使用できますか?

4

1 に答える 1

0

まず第一に、Matrix4d C(400,400);意味がありません: Matrix4d は 4x4 マトリックスであるため、400x400 マトリックスにサイズ変更することはできません。

次に、 operatordeleteは、 operator によって割り当てられたメモリを解放するために使用されます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.
于 2013-03-02T21:04:50.363 に答える