【发布时间】:2015-08-12 08:07:17
【问题描述】:
我有以下结构:
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 结构在哪里?在堆栈上?还是堆?
- 编译器是否足够聪明,只能分配 int[4](这不太可能)还是会分配完整的 foo?
- 我的爸爸的寿命是多少?我可以在 process_a() 函数之外可靠地使用该指针吗?
谢谢! 伊戈尔。
【问题讨论】:
-
你甚至不能在
process_a中使用pa,因为它没有指向任何有意义的地方。 -
你不能使用
pa甚至 insideprocess_a函数,因为一旦表达式pa = get_foo().a完成,返回的结构就会被破坏,留下一个流浪者指针。如果您需要a,您应该复制它。请记住:如果您只使用正确的 C++ 类(例如std::array在您的情况下),处理这样的事情会容易得多。
标签: c++ struct heap-memory assign stack-memory