注册 登录
编程论坛 C++教室

[求助]栈的问题

不以物喜 发布于 2007-08-03 16:38, 615 次点击

#include <stdio.h>
#include <conio.h>
int StackTest()
{
int b=2;
int a=1,*ptr;
int c=3;
ptr=&a;
printf("a的地址是:%d\n",&a);
ptr+=1;
//此处加1,则顺利执行,b的值被置零
//加2 ,弹出错误
//加3,弹出错误
*ptr=0;
printf("%d\n",a);
printf("%d\n",b);
printf("%d\n",c);
printf("堆栈已破坏,函数将不能正常返回!");
return 0;
}

int main()
{
int d=9;
printf("d的地址是:%d\n",&d);
StackTest();
printf("d的值是:\n");
printf("%d\n",d);
return 0;
}
&a=1244960,&d=1245052,相差92,为什么会差这么大的空间?
执行的时候,d先入栈,然后pc,sr,bp,然后是StackTest()函数的局部变量b,a,ptr,c,但为什么a和d的在栈中的地址相差那么大呢(92)?

9 回复
#2
bupthehe2007-08-03 16:58
楼主,你的d跟a就丝毫没有关系啊

他们又没有存放在同一个站内啊
#3
不以物喜2007-08-03 17:11

什么意思?
难道不是一个程序只有一个栈吗?
请讲详细点阿
。。。

#4
bupthehe2007-08-03 17:26
以下是引用不以物喜在2007-8-3 17:11:31的发言:

什么意思?
难道不是一个程序只有一个栈吗?
请讲详细点阿
。。。

系统给一个程序分配的内存空间并不是连续的
举个例子
int a=1;
int b=2;
那么a b 这两个数据存放的地址是毫无关联的

你可以去实验下

#5
不以物喜2007-08-03 17:31
连续着呢。。。
#6
aipb20072007-08-03 17:32
ls正确,int a,int b。
这样系统分配给ab时,不一定占有连续内存,这里可能有,但是仅仅巧合。


连续的分配内存,就用数组。
#7
不以物喜2007-08-03 17:36
即使不连续,按我自己的理解,a和d的地址不应该差那么大吧?
#8
不以物喜2007-08-03 17:39
执行的时候,d先入栈,然后pc,sr,bp,然后是StackTest()函数的局部变量b,a,ptr,c,但为什么a和d的在栈中的地址相差那么大呢(92)?
#9
bupthehe2007-08-03 17:49
以下是引用不以物喜在2007-8-3 17:39:09的发言:
执行的时候,d先入栈,然后pc,sr,bp,然后是StackTest()函数的局部变量b,a,ptr,c,但为什么a和d的在栈中的地址相差那么大呢(92)?

你的这个不是栈吧?

#10
不以物喜2007-08-03 19:02
执行的时候,d先入栈,然后IP,SR,BP,然后是StackTest()函数的局部变量b,a,ptr,c,但为什么a和d的在栈中的地址相差那么大呢(92)?
是栈阿

1