2012-04-15 11 views
0

2つの関連する構造体インスタンスを割り当てて初期化する関数を使用します。しかし、私は割り当て機能の外で持続するメモリを得ることができません。私はalloc_init()内からbarcreated_val1の値をチェックした場合、それは完全に罰金です関数内の構造体の値の割り当てと初期化

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); 
} 

...しかし、スタックオフalloc_initポップ一度、I:また、私はむしろ、すべての可能な場合は、メモリリークせずにこれを行うだろう私はゴミを手に入れた。どのように私はこれらの種類の価値を持続させるのですか?

答えて

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); 
} 

+0

ああ、それはまったくばかげている...それは、デフォルトで参照によってポインタを渡す必要があります!なぜあなたは値でポインタを渡す必要がありますか? –

+0

@ FrancisW.Usherポインタは型です。特に指定がない限り、C++ですべての値を渡します。それは愚かではない。 –

+0

* "C++ですべての値を渡すのは、.." *がそうでない場合を除きます。 –

0

staticにすることができますが、これは最大の解決策ではありません。あるいは、より永続的なクラスやグローバル変数など、より広い範囲でグローバル変数を宣言することもできます。

+1

-1ひどい提案。どのクラス?静的な理由必要がないときにグローバルを使用する理由 –

+0

@LuchianGrigore:しかしそれは質問に答えます。使用するのに最も適切な薬は、エンジニアに任されています。 – wallyk

+0

残念ながら、関数自体がそれらの値を生成するために使用されているので、変数をより高いスコープで宣言することはできません。私はしかし静的変数がここで役に立つ理由に興味があります。 –

関連する問題