如何在Java中实现带指针和内存分配的算法 我有一个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;

如何在Java中实现带指针和内存分配的算法 我有一个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;,java,pointers,migration,malloc,double-pointer,Java,Pointers,Migration,Malloc,Double Pointer,我知道对于一个简单的malloc,比如: char*x=char*malloc256; 在Java中,我会说: ByteBuffer x=ByteBuffer.allocate250 对于任何更复杂的事情,我感到困惑 提前谢谢你这是一个二维数组 double Data[][] = new double[size_x][size_y]; 这是一个二维数组 double Data[][] = new double[size_x][size_y]; 简短的回答:在java或C++中做这种事情既不必

我知道对于一个简单的malloc,比如: char*x=char*malloc256; 在Java中,我会说: ByteBuffer x=ByteBuffer.allocate250

对于任何更复杂的事情,我感到困惑


提前谢谢你

这是一个二维数组

double Data[][] = new double[size_x][size_y];

这是一个二维数组

double Data[][] = new double[size_x][size_y];

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

看起来你要分配一个数组,数组的大小是x,指针的大小是x,然后分配一个二维数组,数组的大小是x,大小是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);
就这样。如果您需要一个对行的引用,您只需要得到表[x]


不要试图在Java中模拟malloc。事情不是这样的。只需定义你需要的类,并用新的来制作一个,java就担心分配内存。

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

看起来你要分配一个数组,数组的大小是x,指针的大小是x,然后分配一个二维数组,数组的大小是x,大小是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);
就这样。如果您需要一个对行的引用,您只需要得到表[x]


不要试图在Java中模拟malloc。事情不是这样的。只需定义您需要的类并使用new来创建一个类,Java就会担心为您分配内存。

我不确定Java是否具有这些功能…即使它具有这些功能,也有点像让开罐器切土豆一样…您不应该这样做,我不确定Java是否有这些功能…即使有,也有点像让开罐器切土豆一样…你不应该这样做,你也有严重伤害自己和他人的风险。这很有趣。这个问题确实说明了java的复杂性和C++的复杂性之间的差异……Chris Thompson:没有意思的是人们认为上面是C++代码。C++代码看起来与java代码几乎完全相同。你几乎可以用任何语言编写可怕的代码。上面的代码仅仅是C代码,并不是特别好写的代码——实际上对于用户来说似乎有点问题allocation@Voo:有人曾经说过,一个足够熟练的程序员可以用任何语言编写FORTRAN程序。显然,你也可以用任何语言编写C程序。我目前正在开发一个Java应用程序,其中每个类的原始程序员都创建了一个接口。即使只有一个类实现它,也没有理由相信还会有另一个类,而且所有引用都在同一个包中。我突然想到这家伙原来是个C程序员。我打赌他会想,那么我如何用Java创建一个.h文件呢?哦,在这里,在Java中他们称之为接口…这很有趣。这个问题确实说明了java的复杂性和C++的复杂性之间的差异……Chris Thompson:没有意思的是人们认为上面是C++代码。C++代码看起来与java代码几乎完全相同。你几乎可以用任何语言编写可怕的代码。上面的代码仅仅是C代码,并不是特别好写的代码——实际上对于用户来说似乎有点问题allocation@Voo:有人曾经说过,一个足够熟练的程序员可以用任何语言编写FORTRAN程序。显然,你也可以用任何语言编写C程序。我目前正在开发一个Java应用程序,其中每个类的原始程序员都创建了一个接口。偶数w 当只有一个类实现它时,就没有理由相信还会有另一个类,并且所有引用都在同一个包中。我突然想到这家伙原来是个C程序员。我打赌他会想,那么我如何用Java创建一个.h文件呢?哦,在这里,在Java中他们称之为接口。。。