2

わかりました。これは、Visual Studioの非常にバギーな静的コードアナライザーにかかっていると確信していますが、これに目を向けても問題はないと考えました。

ベクトルスタイルのコンテナの独自のコレクションを作成しました。それらは問題なく動作しているように見えますが、VisualStudio静的コードアナライザーから次の警告に気づきました。

警告C6386:バッファオーバーラン:「引数1」にアクセスしています。書き込み可能なサイズは「newspace * 4」バイトですが、「4194240」バイトが書き込まれる可能性があります

上記の警告は、次のコードの最後の行(memcpy)で発生し、前のすべての行を強調表示します。この特定のベクトルクラスが保持できるすべての可能なタイプはPODです。 mSpaceには、ベクター内の使用可能なメモリが保持できるアイテムの数が含まれ、mSizeには現在のアイテムの数が含まれます。 mDynamicは、ベクトルによって現在管理されているメモリブロックを指します。

Bool Insert( UInt32 index, TYPE value, UInt32 count = 1 )
{
    if( index < mSize )
    {
        UInt32  newsize = mSize + count;

        if( newsize > mSpace )
        {
            UInt32  newspace = std::max( Align( newsize, 8 ), mSpace << 1 );
            TYPE*   ptr = new TYPE[ newspace ];

            if( ptr )
            {
                memcpy( ptr, mDynamic, index * sizeof( TYPE ));
                // The remainder of the code copies the second half of the
                // existing data and inserts the new values...

目が出血するまで(まあ、ほとんど)これを見てきましたが、アナライザーがこの警告を生成する理由がわかりません。他の場所でも同じ警告が4194240というかなり奇妙な値で見られました。そのため、アナライザーのさらに別のバグであると想定しています。

誰かがこれがアナライザーの既知のバグであることを確認できますか(接続をすばやく検索しても結果が得られませんでした)、またはコードに明らかに見えないバグがありますか?

4

1 に答える 1