堆栈损坏,不知道是什么导致的 所以,为了有点事情要做,我在C++中实现了AES算法。它编译和链接非常好。但在我运行它的那一刻,VS2015报告堆栈在变量temp周围已损坏。它准确地告诉了我它发生在哪里,但我在代码中没有看到任何奇怪的东西: void rotWord(Word &it) { Word temp; for (int i = 0; i < 4; i++) temp[(i - 1) % 4] = it[i]; for (int i = 0; i < 4; i++) it[i] = temp[i]; }

堆栈损坏,不知道是什么导致的 所以,为了有点事情要做,我在C++中实现了AES算法。它编译和链接非常好。但在我运行它的那一刻,VS2015报告堆栈在变量temp周围已损坏。它准确地告诉了我它发生在哪里,但我在代码中没有看到任何奇怪的东西: void rotWord(Word &it) { Word temp; for (int i = 0; i < 4; i++) temp[(i - 1) % 4] = it[i]; for (int i = 0; i < 4; i++) it[i] = temp[i]; },c++,corruption,C++,Corruption,顺便说一下,Word被声明为typedef Byte Word[4],其中Byte只是一个类。知道是什么导致了堆栈损坏吗?我可以发布完整的来源,如果需要的话 temp[(i - 1) % 4] = it[i]; 对于i=0 这是未定义的行为 for (int i = 0; i < 4; i++) temp[(i - 1) % 4] = it[i]; 对于i=0 这是未定义的行为 for (int i = 0; i < 4; i++) temp[(i - 1) %

顺便说一下,Word被声明为typedef Byte Word[4],其中Byte只是一个类。知道是什么导致了堆栈损坏吗?我可以发布完整的来源,如果需要的话

temp[(i - 1) % 4] = it[i];
对于i=0

这是未定义的行为

for (int i = 0; i < 4; i++)
    temp[(i - 1) % 4] = it[i];
对于i=0

这是未定义的行为

for (int i = 0; i < 4; i++)
    temp[(i - 1) % 4] = it[i];
将此更改为:

for (int i = 0; i < 4; i++)
    temp[(i + 3) % 4] = it[i];
将此更改为:

for (int i = 0; i < 4; i++)
    temp[(i + 3) % 4] = it[i];

更麻烦的是,在2011年之前的C标准中,符号or-1%4是实现定义的。所以它可能是-1,但不一定。你的修正很好,修正了问题。不过,现在我需要查看我的代码以进行修复。我想我在其他几个地方做过……丹洛切,这是一个C++问题,更麻烦的是,在2011之前的C标准中,符号或1%到4是实现定义。所以它可能是-1,但不一定。你的修正很好,修正了问题。不过,现在我需要查看我的代码以进行修复。我想我在其他几个地方做过……丹洛切这是一个C++问题。