为函数内部的结构分配和初始化值

时间:2012-04-15 07:24:59

标签: c++ pointers memory-management struct pass-by-reference

我想使用一个函数来分配和初始化两个相关的struct实例。但是我无法在分配函数之外保留内存。另外,如果可能的话,我宁愿这样做也不会发生内存泄漏:

void alloc_init(foo_struct *bar, foo_struct *baz){
    //Create some values in here
    bar = new foo_struct(created_val1, created_val2);
    baz = new foo_struct(created_val3, created_val4);
}

如果我从created_val1中检查baralloc_init()的值,那就完全没问了......但是一旦alloc_init从堆栈中弹出,我就会得到垃圾。如何使这些价值观持续存在?

2 个答案:

答案 0 :(得分:3)

您需要通过引用传递指针:

void alloc_init(foo_struct *& bar, foo_struct *& baz){
    //Create some values in here
    bar = new foo_struct(created_val1, created_val2);
    baz = new foo_struct(created_val3, created_val4);
}

因为您按值传递指针,所以您正在为函数内的原始指针的副本分配内存。

答案 1 :(得分:0)

你可以制作static,这不是最好的解决方案。或者,您可以在更高的范围内声明全局变量,例如在更持久的类或全局变量中。