问题描述
我在 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,&g_callbacks);
return ASIOStart() == ASE_OK;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)