我在 Visual Studio C++ 中收到以下警告消息:
<块引用>C6386:写入“g_bufferInfos”时缓冲区溢出:可写 大小为 'n*24' 字节,但可能会写入 '48' 字节。
从下面的代码中,我进行了三重检查,看不出代码有什么问题;但同时有没有办法清理它以消除警告,还是我需要使用编译指示来禁用它?
ASIOBufferInfo* g_bufferInfos = {};
// ... g_bufferInfos needs to be assigned a variable length array that is
// fed to ASIOCreateBuffers(ASIOBufferInfo* info, ...)
using indices = std::vector<size_t>;
// ...
bool start(const indices ins, const indices outs)
{
if (g_bufferInfos)
return false; // !!!
size_t n = ins.size() + outs.size();
g_bufferInfos = new ASIOBufferInfo[n];
long min, max, pref, gran;
ASIOGetBufferSize(&min, &max, &pref, &gran);
for (size_t i = 0; i < ins.size(); ++i)
{
g_bufferInfos[i].isInput = true; // *** C6386 warning here ***
g_bufferInfos[i].channelNum = ins[i];
}
for (size_t i = 0; i < outs.size(); ++i)
{
g_bufferInfos[ins.size() + i].isInput = false;
g_bufferInfos[ins.size() + i].channelNum = outs[i];
}
ASIOCreateBuffers(g_bufferInfos, n, pref, &g_callbacks);
return ASIOStart() == ASE_OK;
}