gpt4 book ai didi

c - 为什么这个功能会导致不停打印?

转载 作者:太空宇宙 更新时间:2023-11-04 06:37:40 25 4
gpt4 key购买 nike

你好,我的一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com