变量周围的堆栈已损坏(将 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 转换为字节数组)的主要内容,如果未能解决你的问题,请参考以下文章