将 C++ 向量输入到 C 函数中

Input C++ Vector into C function

我有一个 std::vector<float> 包含声音数据。在不复制其数据的情况下,我想将此向量用作 Sonic 库的 sonicChangeFloatSpeed 函数的输入。此方法需要 float* 作为第一个参数并改变输入数组。完成后,第一个参数中的指针将指向结果数据。

data gives me access to the internal array of a C++ vector and with assign,我可以替换向量的内容。因此,我尝试了以下方法:

float* ptr = vec.data();
int num_samples = sonicChangeFloatSpeed(ptr, vec.size(), 1., 1.5, 1., 1., 0, 41000, 1);
vec.assign(ptr, ptr + num_samples);

但是当我 运行 这个程序时,我在这个位置得到了带有 SIGABRT 的错误 double free or corruption (!prev)。这种方法有什么问题,如何更恰当地解决这个问题?

正如我提到的,我根本不使用 sonicChangeFloatSpeed 而是使用其中的代码解决了这个问题。在将流中的结果读入 vec 之前,我执行 vec.resize(numSamples):

sonicStream stream = sonicCreateStream(16000, 1);
sonicSetSpeed(stream, speed);
sonicSetPitch(stream, pitch);
sonicSetVolume(stream, volume);
sonicSetRate(stream, rate);

auto length = static_cast<int>(vec.size());
sonicWriteFloatToStream(stream, vec.data(), length);
sonicFlushStream(stream);
int numSamples = sonicSamplesAvailable(stream);
vec.resize(numSamples);
sonicReadFloatFromStream(stream, vec.data(), length);

sonicDestroyStream(stream);