for循环局部变量有关问题
for循环局部变量问题见代码:#include cstdlib#include iostreamusing namespace stdclass Person{pub
for循环局部变量问题
见代码:
#include <cstdlib>
#include <iostream>
using namespace std;
class Person
{
public:
int a;
int b;
public:
~Person()
{
cout<<"打印出这句,便证明每轮循环后都调用了析构"<<endl;
}
};
int main(int argc, char *argv[])
{
for(int i=0;i<10;++i)
{
Person p;
cout<<&p<<" "<<p.a<<" "<<p.b<<endl;//既然调用了析构,为何每打印的地址值都一样呢
p.a=10;
p.b=20;
}
for(int i=0;i<10;++i)
{
int a;
cout<<a<<endl;//类似上面的循环,后9轮循环都打印出了10,a不是局部变量么,每轮循环结束都销毁了,为何能打印出上轮的值呢?
a=10;
}
system("PAUSE");
return EXIT_SUCCESS;
}
环境Win7 X86 Intel,DevCPP4.9.1 。求助。谢过。
[解决办法]只能说运气问题。碰巧程序运行时,没有其他变量占有那块内存。
[解决办法]内存里的值没有被擦除。
[解决办法]这是系统来决定的!我们决定不了的!
只要注意变量的生命周期就好!,在一定的生命周期中
是会销毁,然后重新申请栈空间就好啦!
至于相同和不相同,不是我们能操作!也是无法知道的!
[解决办法]局部变量的分配,比如分配一个int,就把栈指针加4,释放的时候,就减4,所以你在循环里面每次分配地址是一样的(因为每次都有释放),而且虽然没有标准来规定编译器非要这么做,但可以肯定的是,基本上都这么做,因为没有更好的办法了。
[解决办法]1、谁规定说释放之后的内存空间就不能再用?系统一直在对同一块内存不断的获取-释放,没有问题。
2、局部变量的生命周期是以作用域作为界限的,for循环体就是一个作用域。
[解决办法]局部变量销毁不等于内存擦除,内存还留着那个值的,只有当这块内存被其它东西写进来了才回擦除!