杨嘉健 2011年03月17日 星期四 12:52 | 2990次浏览 | 4条评论
有一朋友的日志求问说这个程序输出什么,我觉得至少在pc环境下面打死打不死我都会说都是1啊……
但是看别人留言就说,这个function会导致main跳过x=1那句…这个我就彻底不明白了…
这个反正我觉得我精神正常的话绝对不会写这种东西的……求高手指点……啊啊啊疯了要……
#include<stdio.h>
#include<stdlib.h>
int function(int a, int b, int c)
{
char buffer[14];
int sum;
int *ret;
ret = buffer + 28;
(*ret) += 10;
sum = a+b+c;
return sum;
}
int main(void)
{
int x;
x = 0;
function(1,2,3);
x = 1;
printf(" %d \n", x);
return 0;
}
Zeuux © 2024
京ICP备05028076号
回复 孔志奎 2011年03月26日 星期六 10:30
{
char buffer[14];
...
ret = buffer + 28;
(*ret) += 10;
第一句导致 ret 溢出了 function 函数的堆栈, 正好覆盖了
第二句
这本
回复 杨嘉健 2011年03月26日 星期六 13:47
m