簡體   English   中英

__m256 陣列上的 Visual Studio 2019 C6385 / C6386(緩沖區溢出警告)

[英]Visual Studio 2019 C6385 / C6386 (buffer overrun warning) on __m256 array

我正在分配一個數組,如下所示:

__m256 *v256f_valid_mask = (__m256*)malloc(sizeof(__m256) * p_ranks);

編譯器在我訪問該數組的所有行上都顯示警告 C6385 / C6386(取決於確切的上下文),除了[0] ,表明可以讀取 64 個字節。 該定義明確指出它是一個 32 字節值的數組。

使用_aligned_malloc()沒有幫助。

重現警告的示例代碼:

void func(const size_t p_ranks)
{
    __m256 v256f_x = _mm256_set1_ps(1.0f);
    __m256* v256f_valid_mask = (__m256*)malloc(sizeof(__m256) * p_ranks);

    for (size_t rank = 1; rank < p_ranks; rank++)
    {
        v256f_valid_mask[rank] = _mm256_cmp_ps(v256f_x, _mm256_setzero_ps(), _CMP_GT_OQ); // <<
    }
}

確切警告:

我用空檢查修復了 C6011 警告。

我的代碼中有錯誤還是誤報?

這是一個誤報,但代碼分析器不知道(可能是因為它不“信任” malloc() 調用)! 使用“new”來清除警告(至少,在我的 VS2019 解決方案中)……

void func(const size_t p_ranks)
{
    __m256 v256f_x = _mm256_set1_ps(1.0f);
//  __m256* v256f_valid_mask = (__m256*)malloc(sizeof(__m256) * p_ranks);
    #if defined(__cplusplus)
    __m256* v256f_valid_mask = new __m256[p_ranks];
    #else
    #define MAXRANKS 100 // Would probably be defined elsewhere!
    __m256 v256f_valid_mask[MAXRANKS];
    #endif

    for (size_t rank = 1; rank < p_ranks; rank++)
    {
        v256f_valid_mask[rank] = _mm256_cmp_ps(v256f_x, _mm256_setzero_ps(), _CMP_GT_OQ); // <<
    }
}

請試試看!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM