【问题标题】:Stack around variable corrupted. Why does this happen? [closed]堆栈周围的变量损坏。为什么会这样? [关闭]
【发布时间】:2011-12-10 15:08:53
【问题描述】:

我将BufferOut 定义为一个 16 元素数组。

但我在调试时遇到此消息。

Run-Time Check Failure #2 - Stack around the variable 'BufferOut' was corrupted.

HIDBufferOutchar 数组的 16 个元素

 HIDBufferOut BufferOut; // first element is the report ID 
    BufferOut[0] = 0; 
    BufferOut[1] = 211; 
    BufferOut[16] = 44; 
    BufferOut[4] = 4;

    .
    .
    .
    .
    etc

【问题讨论】:

  • 错误信息足够描述性。如果你想不通,那么我们也不能不看源代码。
  • HIDBufferOut BufferOut; // first element is the report ID BufferOut[0] = 0; BufferOut[1] = Marker(); BufferOut[16] = (int) 44; BufferOut[4] = typ;
  • 因为您要在数组中插入第 17 个元素
  • BufferOut 是一个16 元素的数组是什么? Marker() 实际上做了什么?什么是典型?您需要发布导致问题的代码的最小示例,并对变量是什么进行某种解释。
  • @user1091216 我看到你已经“更新”了你的代码。但是,我仍然看不到数组。你的 16 个元素的数组在哪里?我看到一个名为 BufferOut 的 HIDBufferOut .....

标签: c++ mfc buffer


【解决方案1】:

如果 BufferOut 是 16 个元素的缓冲区,则有效索引为 0、...、15。这意味着:

BufferOut[16] = (int) 44;

写入超出数组范围,导致内存损坏。

【讨论】:

  • 我尝试用 17 个元素定义它,但问题还是一样
  • 您在哪里创建阵列?我在上面的代码中没有看到它。
  • @user1091216:如果是这样,那么您仍然没有提供足够的信息。
【解决方案2】:

这通常发生在您在无法触及的位置写入导致缓冲区溢出和堆栈损坏时,从这段代码中可以清楚地看出: BufferOut[16] = (int) 44; //你在第 17 个位置写的越界

【讨论】:

  • 将数组大小更改为 17 个元素,如果它仍然存在,请进行清理,而不是从头开始重新构建项目有时会有所帮助。
【解决方案3】:

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2013-07-28
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 2012-11-08
相关资源
最近更新 更多