1

C++ のアルゴリズムがあり、Java で同様のものを実装する必要があります。メモリ割り当てに問題があります。たとえば、次のスニペットを C++ から Java に移行するにはどうすればよいですか?

size_x = 3; size_y = 6; 
double **Data, *pDataData;
Data = (double **)malloc(size_x*sizeof(double *)+size_x*size_y*sizeof(double));
for (i = 0, pDataData = (double *)(Data+size_x); i < size_x; i++, pDataData += size_y)
Data[i]=pDataData;

char *x = (char *) malloc(256); のような単純な malloc については知っています。Java では、次のように言います: ByteBuffer x = ByteBuffer.allocate(250);

もっと複雑なものについては、私は混乱します。

前もって感謝します

4

2 に答える 2

5

これは2次元配列です。

double Data[][] = new double[size_x][size_y];
于 2011-07-22T21:07:05.317 に答える
0

簡単な答え: Java や C++ でそのようなことを行う必要はなく、望ましくもありません。クラスの発明以来、複雑な構造が必要な場合は、クラスを作成し、無定形のメモリの塊を割り当ててから、名前ではなくオフセットによって取得されるものをそのメモリに配置する必要があります。

つまり、ポインターの size_x の配列を double に割り当てようとしているように見えます。次に、ポインターがテーブル内の連続する行を指している状態で、サイズ size_x と double の size_y の 2 次元配列を割り当てようとしているように見えますか? あなたが何をしようとしているのか理解できていない場合は申し訳ありません。私の謙虚な意見では、まさにこれが Java の方法が優れている理由です。複雑な構造を理解するのはそれほど難しくありません。

Java では、行へのポインターは必要ありません。したがって、Java では、これは次のようになります。

public class MyDataData
{
  double[][] table;

  public MyDataData(int size_x, int size_y)
  {
    table=new double[size_x][size_y];
  }
}

それを呼び出すには、次のように記述します

MyDataData whatever=new MyDataData(3,6);

そして、それはそれについてです。行への参照が必要な場合は、table[x] を取得するだけです。

Java で malloc をシミュレートしようとしないでください。それはそれが行われた方法ではありません。必要なクラスを定義し、「new」を使用してクラスを作成するだけで、Java がメモリの割り当てを心配します。

于 2011-07-22T21:39:33.157 に答える