为什么只返回指向对象的指针?

时间:2016-12-16 21:23:47

标签: c++ c++11

我有一个最近解决的错误,但我想了解原因。我有一个使用c ++ 11的cmake项目。

这适用于mac osx但不适用于ubuntu。它在ubuntu上返回null。

obj *getPointer(){
  obj test = obj(1,2,3);
  return &test;
}

这适用于:

obj *getPointer(){
  obj* ptr;
  obj test = obj(1,2,3);
  ptr = &test
  return &ptr;
}

1 个答案:

答案 0 :(得分:11)

您的两个实例都会调用未定义的行为(UB),因为您返回的是本地对象obj test的地址f(n) = sin(n) g(n) = cos(n) ,该函数在函数出口处被销毁,因此您最终会一个悬垂的指针。它只是"发生"工作,但任何事情都可能发生,所以你应该不惜一切代价避免UB!

要理解它为什么会起作用,那是因为可能在函数退出时操作系统还没有回收函数的堆栈,所以悬空指针恰好指向相同的数据

automatic storage durationThis answer提供了我曾经见过的关于悬挂指针的最佳解释之一。