为什么结构变量超出范围
Why struct variable goes out of scope
在下面的代码中,为什么我无法从 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;
}
因为 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
。
因为在函数fun1中,test_var是局部变量
void fun1(test* test_var)
因此,在 fun1 中所做的任何修改都是在局部变量上完成的。
您需要做的:
void fun1(test*& test_var)
在下面的代码中,为什么我无法从 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;
}
因为 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
。
因为在函数fun1中,test_var是局部变量
void fun1(test* test_var)
因此,在 fun1 中所做的任何修改都是在局部变量上完成的。
您需要做的:
void fun1(test*& test_var)