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

标签 c printing infinite

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

相关文章:

Haskell如何为模拟生成无限数量的无限随机数列表?

list - 从列表创建无限流

ruby - 迭代器的无限产量

javascript - 哪个 javascript 解释器最容易嵌入到 C 应用程序中?

c - 为什么这个数组不够大?

html - 谷歌浏览器 (v.51) 未应用打印媒体 css

javascript - 打印从服务器加载的内容

c++ - 杂乱的函数指针 : how to remove the warning?

c++ - 在 ARM 平台上正确检测混合端浮点格式

printing - 写入时 libusb_bulk_transfer 超时