为什么结构变量超出范围

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_varfun1 的局部变量,而赋值

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::vectorstd::shared_ptr

因为在函数fun1中,test_var是局部变量

void fun1(test* test_var)

因此,在 fun1 中所做的任何修改都是在局部变量上完成的。

您需要做的:

void fun1(test*& test_var)