去文档里看说是这样↓
无法显式释放使用分配 stackalloc 的内存。 在函数成员执行过程中创建的所有堆栈分配的内存块将在该函数成员返回时自动被丢弃。
里面提到在函数成员返回时,不知道是理解为方法返回后,还是在离开其作用域就算返回。
函数成员不知道是理解为“函数”还是函数中的“局部变量”这种成员?
比如
int* usedPtr = null;
if(true)
{
int* ptr = stackalloc int[4];
//此处肯定是有效的
usedPtr = ptr;
}
//进行到此处时,ptr指针是否已经被释放失效
//还是可以一直保留到方法结束?
*usedPtr[0] = 1;//如果在离开if后就失效了,那这一步岂不是操作野指针?
由此也衍生出另一个问题
if(true)
{
int i = 0;
}
//运行到此处时,if中的局部变量 i 所占用内存是在离开其作用域后立即被释放,还是并没有被释放而仅仅是无法访问了?
希望解答。
应该是 离开其作用域就算返回 栈上分配的内存 就和 普通变量一样的原理
if(true)
{
int i = 0;
}
和这个变量i离开if作用域就失效是一样的
个人理解是离开作用域就不能再用了,不能确保正常使用;