- 主题:这个程序的输出是多少
想知道为什么是0
学学汇编,看编译的结果
【 在 l234567890 的大作中提到: 】
: 第一阶段已经知道了
: 所以才会纠结这个值是0,而且运行很多次还是0
: 你如果可以解答就解答
: ...................
--
FROM 220.200.25.*
3,32767
3,111
执行出来是这个结果
多次执行,上面第二个偶尔会有变化,下面的一直不变
【 在 liuxueshen 的大作中提到: 】
: 试试这个:
: void foo();
: void foo1();
: ...................
--
FROM 218.29.119.*
看来经过foo1()执行后,那块区域都被填充为111,了再执行foo()的时候,新分配的空
间还在那个区域,所以一直是111
多谢解惑
【 在 liuxueshen 的大作中提到: 】
: 试试这个:
: void foo();
: void foo1();
: ...................
--
FROM 218.29.119.*
这有什么奇怪的, 栈里的东西, 取决于这个函数被调用时之前运行的状态, windows下静
态运行, 结果应该是固定的(每个应用的栈都被操作系统初始化).
如果你用随机数使得进入此函数的状态不同, 那结果就会变化了.
你这段代码, 对于b这个数组, 伪代码就是
int r0 = sp; // stack pointer
int r1 = 3;
*(r0 - 24) = r1;
b[0] = *(r0 - 24),
b[1] = *(r0 - 20),
b[2] = *(r0 - 16),
...
【 在 l234567890 的大作中提到: 】
: 按说是未知的,但是输出的是0,b[2]就不是了
: 所以很奇怪
--
FROM 14.153.78.*
能够看出,b1=0在这个编译环境下,有一定必然性
不过究竟是什么机制,没意义
【 在 l234567890 的大作中提到: 】
: #include<stdio.h>
: main()
: {int a,c[100],b[5];
: ...................
--
FROM 39.144.57.*
多谢这种有价值的回复
【 在 jesce 的大作中提到: 】
:
: 这有什么奇怪的, 栈里的东西, 取决于这个函数被调用时之前运行的状态, windows下静
: 态运行, 结果应该是固定的(每个应用的栈都被操作系统初始化).
: ...................
--来自微微水木3.5.12
--
FROM 171.10.145.*
这种,看汇编代码就行了,结果取决于OS和编译器(包括编译器对debug/release模式的不同处理,比如VC在debug模式下会用0xCC填充栈区域啥的)。说汇编无用的人,都让他一边去。
--
修改:z16166 FROM 111.199.145.*
FROM 111.199.145.*
谢谢,知道原因后就释然了
【 在 z16166 的大作中提到: 】
: 这种,看汇编代码就行了,结果取决于OS和编译器(包括编译器对debug/release模式的不同处理,比如VC在debug模式下会用0xCC填充栈区域啥的)。说汇编无用的人,都让他一边去。
--
FROM 1.192.38.*
那你最后得出啥结论?怎么释然的?
栈区的数据规律是什么?
【 在 l234567890 的大作中提到: 】
: 谢谢,知道原因后就释然了
:
--
FROM 101.224.115.*
知道原因就够了
我暂时不需要进一步应用
【 在 zbz4 的大作中提到: 】
: 那你最后得出啥结论?怎么释然的?
: 栈区的数据规律是什么?
--
FROM 1.192.38.*