本帖最后由 pkuzhx 于 2016-3-28 15:17 编辑
哦,没仔细看,这种用法确实是错的,局部变量存储在栈中,函数返回后就释放了。即便有时候能够正确输出,也不能这么用。
int *p=ad_val();
int a[3];
p=ad_val();
cout<<"test"<<endl;//注释掉就能正确输出
a[0]=*p;
a[1]=*(p+1);
a[2]=*(p+2);
中间增加任何语句都有可能破坏释放掉的空间的值。本来在cout之前p指向的地址存贮的值是正确的:
但这一块空间是释放掉的,不受保护的,cout函数执行时,改变了这一块的值:
输出就错误了。
即便你保证中间可以不加入任何代码,就立即使用这一块地址的值,但也不能保证后台的其他函数不会改变这一块的值。所以还是乖乖把reg_val也定义成static吧。
|