我必须在函数中返回结构对象的指针,但我没有将它们存储为指针,因此我使用return &myStructObject;
返回。它没有给出任何编译时错误,但我正在尝试做的是正确的吗?
答案 0 :(得分:0)
如果您引用的结构对象是函数的本地对象,则不应返回该结构对象的地址。这是因为当您的函数返回对其调用者的调用时,所有局部变量都将从内存中销毁。
例如: -
以下是致命错误
int* myFunc ()
{
int p = 4; // memory is allocated for p.
// do something.
return &p; // memory for p is deallocated and you are returning pointer to that memory
}
答案 1 :(得分:0)
如果从函数返回后要返回其指针的struct变量仍在范围内,那么你所做的是正确的。
另一方面,如果有问题的struct变量是函数的局部变量,并且一旦从函数返回就会被销毁(释放),那么你将返回的指针将是dangling pointer,并且不能满足你的目的。
修改强>
“不会达到你的目的”,我的意思是它不会做你想象的那样!当你确定它没有按照你期望的那样做时,没有必要讨论它能做什么的危害!
答案 2 :(得分:-1)
如果你在一个函数中有一些本地的东西而你正在返回那个地址,那么它将会丢失,即无效。原因是您返回地址的函数将从堆栈中弹出,任何非静态(非全局)都将丢失。从本质上讲,程序存储器没有作为“终身”资源的任何东西都将消失。您可以将指针作为参数传递给函数,并取消引用它以修改指针指向的值。但是任何非静态(或非全局)并作为地址返回的内容都会导致您访问违规类型错误。