您好我有一个带有返回指针的函数的类:
int* Maze::GetStart()
{
int startNode = 1;
return &startNode;
}
在函数返回指针后,是否会删除startNode的值?
如果我这样做了,那么值会被保存吗?
int Maze::GetStart()
{
int startNode = 1;
return startNode ;
}
main
{
int* pStart = maze.GetStart();
}
答案 0 :(得分:4)
是否会删除startNode的值 函数返回后 指针?
一旦函数startNode
返回,变量GetStart()
将不复存在,所以在这个意义上,是的。
但是,通过将地址返回到GetStart()
返回后将消失的内容,您的代码为未定义的行为开辟了一个巨大的机会。如果调用者尝试取消引用返回的node*
,则可能发生任何事情。此外,代码无法按原样编译,因为您无法隐式地将int*
强制转换为node*
。
但是,如果您按价值返回,那么您应该没事:
int Maze::GetStart()
{
int startNode = 1;
return startNode;
// return 1; // Why not do this?
}
int pStart = maze.GetStart(); // Get returned value as int, not pointer to int.
答案 1 :(得分:1)
在堆栈上分配的变量的返回地址根本没有意义。函数startNode
返回后,变量GetStart()
的生命周期就会结束。它是自由函数还是成员函数无关紧要。
我认为,在gcc / g ++中有一个警告。
基于问题编辑:
如果要修改变量并保存已修改状态,则必须将其声明为static
。请参阅static local variables。