我有以下结构:
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;
}
看起来代码运行正常,但完全结构发生了什么是完全未知的,因为我只能访问它的子部分。 而且,问题是:
谢谢! 伊戈尔。
答案 0 :(得分:0)
foo
正在堆叠pa
的生命周期就像任何局部变量一样 - 直到func结束。你不能在功能范围之外使用它。但是,这里有一个不同的问题 - get_foo的返回值是临时的,一旦超出pa
的赋值范围,它就会被释放,因此{{1}指向的数据的任何使用都会被释放之后会导致未定义的行为。答案 1 :(得分:0)
pa
的生命周期是process_a
的正文,但*pa
的生命周期已过期,如上所述。pa
的值用于任何内容(除了复制它),甚至 in process_a
。您的代码似乎运行正常,因为“似乎运行正常”是一种有效的未定义行为形式,就像任何事情一样。