如何平息此 C6386:写入时缓冲区溢出...警告? // 我 99% 确定它是假的

问题描述

我在 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 (将#修改为@)