gpt4 book ai didi

c++ - VS2015 : [C6386] Buffer Overrun while writing (even for same index value)

转载 作者:搜寻专家 更新时间:2023-10-31 00:10:41 29 4
gpt4 key购买 nike

当我在 Visual Studio 2015 中遇到 [Analyze -> Run Code Analysis] 引发的一些有趣问题时,我正尝试在 C 中实现合并排序。

代码如下:

void MergeSort_r(int A[], int n)
{
// A = {1, 3, 2}
// n = 3
int rightCount;
int* R;

if ( n < 2 ) return;

// version 1: rightCount = 2
rightCount = n - (n/2);

// version 2: rightCount = 2
rightCount = n - 1;

R = ( int* ) malloc( rightCount * sizeof( int ) );

if ( R ) {
for ( int i = 0; i < rightCount; i++ ) {
R[i] = A[i];
}

free( R );
}

}

即使 rightCount 的两个版本基本上都计算为 2,但在第一个版本中,我收到警告:

"Buffer overrun while writing to 'R': the writable size is '(unsigned int)rightCount*sizeof(int)' bytes, but '8' bytes might be written."

知道为什么会这样吗?期待听到您的回答。

最佳答案

Visual C++ 代码分析工具集可能并不总是提供最好的警告。它试图为您提供最好的一组警告,以修复一些可能在运行时出现的潜在问题/错误。您有几个选择:

  • 使用 #pragma 指令禁用代码周围的给定警告。
  • 使用 C++ 构造:newmake_unique
  • (不推荐) 是完全忽略警告并继续前进。

理想情况下,您应该始终使用较新的智能指针原语,如 unique_ptrshared_ptr 等。它们不仅为您分配内存,而且会在调用堆栈中抛出的任何异常时释放内存。您根本不需要输入 *!

auto buffer = make_unique<int[]>(10); // 10 integers

关于c++ - VS2015 : [C6386] Buffer Overrun while writing (even for same index value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37205179/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com