Как реализовать алгоритм с указателями и распределением памяти в Java - PullRequest
1 голос
/ 23 июля 2011

У меня есть алгоритм на 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);

Для чего-то более сложного я запутался.

Заранее спасибо

Ответы [ 2 ]

5 голосов
/ 23 июля 2011

Это двумерный массив.

double Data[][] = new double[size_x][size_y];
0 голосов
/ 23 июля 2011

Краткий ответ: в Java или C ++ такое не нужно и не желательно.С момента изобретения классов, когда вам нужна сложная структура, вы должны создать класс, а не выделять аморфный блоб памяти, а затем помещать в эту память вещи, которые извлекаются смещением, а не именем.

Похоже, вы пытаетесь выделить массив указателей size_x на удвоенные значения, а затем двумерный массив указателей на size_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].

Не пытайтесь симулировать malloc в Java.Это не так, как это делается.Просто определите класс, который вам нужен, и используйте «new», чтобы создать его, и Java будет беспокоиться о выделении памяти для вас.

...