c ++: массив типа указателя с плавающей точкой с динамическим размером - PullRequest
0 голосов
/ 24 сентября 2018

Правильно ли это?

Будет stereoBuffer будет массивом указателя типа float с размером mixQty (т.е. 2);

// C++ in Header File

float **stereoBuffer;

// in cpp file inside a function of init

mixQty = 2; // this will be passed in function

stereoBuffer = new float*[mixQty];

for (int i = 0; i < mixQty; ++i) {
    stereoBuffer[i] = (float *)malloc(samplerate * 2 * sizeof(float) + 32768);
}

Помощь и подробный ответ будут вознаграждены.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Будет StereoBuffer быть массивом типа указателя с плавающей точкой

Это будет (указатель на первый элемент) массив типа указателя на число с плавающей точкой.

Каждый элемент этого массива будет указателем на первый элемент массива с плавающей точкой.

Как отмечает gsamaras, смешивать new и malloc, как это ужасная практика.Это бесполезно трудно правильно освободить и нет проверки ошибок.Вы можете хотя бы использовать std::vector<std::unique_ptr<float[]>> и позволить ему правильно позаботиться о вашем освобождении.

using StereoBuffer = std::vector<std::unique_ptr<float[]>>;

StereoBuffer allocateStereoBuffer(size_t mixQty, size_t samplerate)
{
  StereoBuffer buf(mixQty);

  for (size_t i = 0; i < mixQty; ++i) {
    buf[i] = make_unique<float[]>(samplerate * 2 * 32768); // ?
  }
  return buf;
}
0 голосов
/ 24 сентября 2018

Это правильно?

Нет .Смешивать new и malloc() не очень хорошая идея.

Если вам нужно использовать динамическое выделение памяти, прочитайте это: Как объявить двумерный массив в C ++ с использованием new?

В противном случае используйте std::vector.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...