c ++:具有动态大小的指针浮点类型的数组

时间:2018-09-24 13:31:11

标签: c++ pointers

这正确吗?

stereoBuffer 将是大小为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 :(得分:3)

  

这正确吗?

。混合newmalloc()并不是一个好主意。

如果必须使用动态内存分配,请阅读以下内容:How do I declare a 2d array in C++ using new?

否则,请使用std::vector

答案 1 :(得分:1)

  

stereoterBuffer将是指针浮点类型的数组

它将是(指向第一个元素的指针)数组类型为float的指针。

此数组的每个元素都是指向float数组的第一个元素的指针。

gsamaras指出,像这样混合mallocstd::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; } 并让它为您正确处理释放。

>>> from sympy import *
>>> N1 = 2
>>> N2 = 5
>>> N3 = 7
>>> (N1*(-sqrt(15)/36 + Rational(5, 36)) - 5*N2/18 + N3*(sqrt(15)/36 + Rational(5,36)))
-0.138888888888889 + 5*sqrt(15)/36
>>> import sympy
>>> sympy.__version__
'1.3'