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

时间:2021-08-01 00:15:18

标签: pointers memory compiler-warnings suppress-warnings

我在 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;
        }

0 个答案:

没有答案