这正确吗?
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);
}
帮助和详细信息答案将得到奖励。
答案 0 :(得分:3)
这正确吗?
否。混合new
和malloc()
并不是一个好主意。
如果必须使用动态内存分配,请阅读以下内容:How do I declare a 2d array in C++ using new?
否则,请使用std::vector
。
答案 1 :(得分:1)
stereoterBuffer将是指针浮点类型的数组
它将是(指向第一个元素的指针)数组类型为float的指针。
此数组的每个元素都是指向float数组的第一个元素的指针。
gsamaras指出,像这样混合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;
}
并让它为您正确处理释放。
>>> 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'