你好,我的一个 friend 向我展示了这段代码,以说明关于数组/堆栈绑定(bind)检查的观点。
#include <stdio.h>
void foo() {
unsigned long long a[1];
a[3] -= 5;
printf("Print me!\n");
}
int main(){
foo();
return 0;
}
当我运行这段代码时,它一直在打印“Print me!\n”,就是不停。我用 MingW 64bit 编译了代码。这里发生了什么事?我希望有人向我解释,为什么它一直打印文本。
最佳答案
您通过命令 a[3] -= 5;
损坏了线程堆栈,因为更改 var 超出了数组范围。该行为是完全不可预测的,并且在其他系统上可能有所不同。我想你只是修改堆栈上的返回地址来调用 printf
如果您想了解 - 使用反汇编程序。
关于c - 为什么这个功能会导致不停打印?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12875399/