我在网上看到的,我以为答案是4,因为只有4才在栈里面,不过有人说答案是1,不知道为什么
下面使用那项可能会引起堆栈溢出
1.静态全局变量
2.动态全局变量
3.静态局部变量
4.动态局部变量
#include <stdio.h>
#include <stdlib.h>
int StackOverflow();
void show();
int i;
int main(int argc, char *argv[])
{
StackOverflow(10);
system(\"PAUSE\");
return 0;
}
int StackOverflow(int count)
{
void (*array[3])();
for(i=0;i<count;i++)
array[i]=show;
return 0;
}
void show()
{
printf(\"your stack is overflow! haha~\n\");
system(\"PAUSE\");
}
非常感谢,的确溢出了,不过有些原理还不是很懂,为什么在i=6的时候count才改变,为什么在i=57的时候才进入show(),你的那句array[i]=show我真的不是很懂,不好意思。
我查了内存,在array[2]跟count之间有8个字节 ,这是什么?
下面是我画的StackOverflow函数的内存图
+-+-+-+-+-+-+-+-+
| count | ---------->参数
+-+-+-+-+-+-+-+-+
| 4F 10 40 00 |
+-+-+-+-+-+-+-+-+
| 80 FF 12 00 |
+-+-+-+-+-+-+-+-+ \
| array[2] | |
+-+-+-+-+-+-+-+-+ |
| array[1] | >-------->动态变量
+-+-+-+-+-+-+-+-+ |
| array[0] | |
+-+-+-+-+-+-+-+-+ /
#include <stdio.h>
#include <stdlib.h>
#define COUNT 10
int StackOverflow();
void show();
int i;
int main(int argc, char *argv[])
{
StackOverflow();
system(\"PAUSE\");
return 0;
}
int StackOverflow()
{
void (*array[3])();
for(i=0;i<COUNT;i++)
array[i]=show;
return 0;
}
void show()
{
printf(\"your stack is overflow! haha~\n\");
system(\"PAUSE\");
}
研究研究呵呵....
本人是个编程爱好者,本人自己有个黑客技术论坛(振华培训基地),这里有c、C++、JAVA、VB等编程语言的教程,学习程序从理论到上机,最后课本学完后有项目实战是根据北大清鸟的课程体系来设计的(本人是北大清鸟的学员),
初学者的困惑都是共同的,很多程序能看懂就是不会编,能看懂```说明你的相应语法知识学到位了`````而且也一定的理解思维能力``不能编```说明你缺少练习``要多思考``多练习``任何一个问题``再难``都有它简单的一面``都是从这些简单的面慢慢升级的```当你不会编的时候``不问题简单化``简单到你会编了``然后再一步步的``难度化``最后到它的原来难度```,本人知道编程是个枯燥无味的活,也许多人参研究、讨论就会轻松多了,这也是本人建站的初衷呵呵。。。爱好编程的朋友可以去我的论坛逛逛,共同学习,挑战困难呵呵。
论坛网址:http://www.zh-hack.com/bbs/index.php