变量周围的堆栈已损坏(将 long long 转换为字节数组)

Posted

技术标签:

【中文标题】变量周围的堆栈已损坏(将 long long 转换为字节数组)【英文标题】:Stack around variable was corrupted (Converting long long to byte array) 【发布时间】:2015-07-23 15:33:00 【问题描述】:

当它到达这个函数的末尾时,它会为变量 keybytes2 发出“围绕变量的堆栈已损坏”。我不确定为什么这是一个问题。我正在使用 NVCC 编译器。

char keybytes2[7];
long long unsigned lkey;

lKey = 32428228256948131;

//convert long long to byte array
for (int i = 0; i < 8; ++i) 
    keybytes2[i] = ((lkey) >> 8 * i) & 0xFFu;

【问题讨论】:

您只是使所有答案无效并破坏了该错误的可重复性。我正在恢复您的编辑。如果您可以生成testcase,那就太好了,否则应该关闭。 你应该用更新后的代码重新提问。 【参考方案1】:
char keybytes2[7];

这仅分配 7 个字节,而不是 8 个。但在循环中您访问keybytes2[7],即数组的第八个字节。这是超出范围的访问,因此是未定义的行为。

【讨论】:

抱歉,打错了。它是 keybytes2[8] 并且仍在产生错误。 我会创建一个新问题...这个问题因我的错字而无效。【参考方案2】:

您的数组keybytes2 仅包含从 0 到 6 的元素。

您的循环正在尝试写入keybytes2[7]。这是未定义的行为,在你的情况下,它通过破坏你的堆栈来表现出来。

补救办法是用char keybytes2[8];替换

【讨论】:

抱歉,打错了。它是 keybytes2[8] 并且仍在产生错误。

以上是关于变量周围的堆栈已损坏(将 long long 转换为字节数组)的主要内容,如果未能解决你的问题,请参考以下文章

运行时检查失败 #2 - 变量“primes”周围的堆栈已损坏

变量“Yarray”周围的堆栈已损坏

如何修复“调试错误!,变量'x'周围的堆栈已损坏”?

运行时检查失败 #2 - 变量“结果”周围的堆栈已损坏

VS2010 和 OpenCV:变量周围的堆栈已损坏

c++ 运行时检查失败 #2 - 变量“ToSend22”周围的堆栈已损坏