在下面的代码中,为什么我无法从main访问test_var?我的假设是new在堆中分配内存,所以生命周期一直到main的结尾,或直到你明确删除它。但是当我尝试访问test_var时,我得到了异常。
typedef struct test{
int a;
string str;
}test;
void fun1(test* test_var)
{
test_var = new test[2];
test_var[0].a=1;
test_var[0].str='a';
test_var[1].a = 2;
test_var[1].str = 'b';
return;
}
int main()
{
test *test_var = NULL;
fun1(test_var);
cout<<test_var[0].str;
delete test_var;
return 1;
}
答案 0 :(得分:4)
因为test_var
是fun1
的本地和分配
test_var = new test[2];
仅在函数内有效。
你需要
void fun1(test** test_var)
{
*test_var = new test[2];
...
}
和main
:
test *test_var = NULL;
fun1(&test_var);
P上。 S.这不是真正的 C ++代码。原始指针操作是危险的,应该避免。 C ++有更清晰的机制来完成你想要做的事情。请参阅std::vector
,std::shared_ptr
。
答案 1 :(得分:3)
因为在函数fun1中,test_var是一个局部变量。
void fun1(test* test_var)
因此,在fun1中完成的任何修改都是在局部变量上完成的。
你需要这样做:
void fun1(test*& test_var)