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;

我知道对于像这样的简单 malloc: char *x = (char *) malloc(256); 在 Java 中,我会说:ByteBuffer x = ByteBuffer.allocate(250);

对于更复杂的事情,我会感到困惑。

先感谢您

4

2 回答 2

5

那是一个二维数组。

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

简短的回答:在 Java 或 C++ 中做这样的事情既没有必要也不可取。由于类的发明,当您需要一个复杂的结构时,您应该创建一个类,而不是分配一个无定形的内存块,然后将通过偏移量而不是名称检索的东西放入该内存中。

所以看起来你正在尝试分配一个 size_x 指向双精度指针的数组,然后是一个大小为 size_x 乘以 size_y 的双精度的二维数组,指针指向表中的连续行?抱歉,如果我不明白您要做什么。这就是为什么 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 回答