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

时间:2015-07-23 15:33:01

标签: c++ nvcc

当它到达此函数的末尾时,它会因变量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;
}

2 个答案:

答案 0 :(得分:2)

char keybytes2[7];

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

答案 1 :(得分:1)

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

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

补救方法是替换为char keybytes2[8];