当它到达此函数的末尾时,它会因变量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;
}
答案 0 :(得分:2)
char keybytes2[7];
这只分配7个字节,而不是8.但是在循环中你访问keybytes2[7]
,即数组的第8个字节。这是一种超出范围的访问,因而是未定义的行为。
答案 1 :(得分:1)
您的数组keybytes2
仅包含0到6之间的元素。
您的循环正在尝试写入keybytes2[7]
。这是未定义的行为,在您的情况下,通过破坏您的堆栈来表现自己。
补救方法是替换为char keybytes2[8];