【发布时间】:2019-08-10 19:46:49
【问题描述】:
我分配一个数组如下:
__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 警告。
我的代码有错误还是误报?
【问题讨论】:
-
如果您提供了诊断的全文将会有所帮助。因为您只能从熟悉错误代码或遇到麻烦的人那里得到答案 (docs.microsoft.com/en-us/visualstudio/code-quality/…)。
-
不可能使用“重现警告的示例代码”“重现警告”,因为它不完整并且包含对我们不可用的符号的引用。这只是生成警告的代码 - 这不是一回事,而且几乎没有那么有用。
-
@Clifford,我已将代码编辑为仅包含有问题的行。它现在应该重现警告。
-
p_ranks是什么类型,它的值是多少? -
不是编译错误,只是代码分析警告。如果语句实际复制了 64 个字节,它将是有效的,但当然不是。很简单的错误。使用帮助 > 发送反馈 > 报告错误来告诉他们。并禁用警告以继续。使用 [visual-c++] 标签来避免此类 cmets。
标签: c++ visual-studio compiler-warnings visual-studio-2019