c ++仅分配函数调用返回的结构的一部分

c++ assigning only part of struct returned by function call

我有以下结构:

struct foo{
    int a[4];
    int b[4];
}

我有以下功能:

foo get_foo()
{
    foo ret_val;
    <..some assignments here..>
    return ret_val;
}

现在,我的主要代码:

void* process_a()
{
    int* pa = get_foo().a;
    <..do smth with "pa"..>
     return pa;
 }

看起来代码 运行 没问题,但完全不知道完整结构会发生什么,因为我只能访问它的一部分。 还有,问题:

谢谢! 伊戈尔.

  • 是的,可以将指针分配给结构的内部字段。
  • foo 在堆栈上
  • 就像你说的 - 这不太可能
  • pa 的生命周期就像任何局部变量一样 - 直到 func 结束。您不能在 func 范围之外使用它。但是,您在这里有一个不同的问题 - get_foo 的 return 值是临时的,一旦您超出了 pa 的分配范围,它就会被释放,因此任何使用之后 pa 指向的数据将导致未定义的行为。
  • 是的,但它仅在结构的生命周期内有效。
  • 从函数中 return 得到的结构是一个临时对象,它会立即被销毁。
    会有一些space,可能是"on the stack",用于函数将return其结果转化为
    一旦右侧的赋值执行完毕,该结构就不会存储在任何地方,因为它不存在。
  • 它几乎肯定会为整个结构分配 space。
  • pa 的生命周期是 process_a 的主体,但是 *pa 的生命周期已经过期,如上所述。
    因此,即使 inside process_a.
  • 也不能将 pa 的值用于任何事情(复制除外)

您的代码似乎 运行 没问题,因为 "appears to be running fine" 是一种有效的未定义行为形式,就像其他任何事情一样。