私はこのような機能を持っています
void some_func(some_type *var)
{
// do something a get a var2 of type some_type*
var = var2;
}
そして主に私は持っています
some_type *var;
some_func(var);
print_var(var);
しかし、プログラムを実行するとセグメンテーション違反が発生します。デバッグはprint_var
、あたかもvar
価値がないかのように、それが問題であることを示しています。var2
を使用して初期化されるnew some_type
ため、 に対してこれを行う必要はないと思いますvar
。
しかしvar = new some_type
、メインで実行し、で手動でクローン (の各データをコピーvar2
)var
するとsome_func
、エラーは発生しません。
私の問題はどこですか?私はポインターとメモリ割り当てにあまり慣れていませんが、両方の方法が機能するはずです。私が間違っている?
おそらく主な問題はnew
、関数で使用してポインターを割り当て、そのアドレスをポインターの引数に保持する場合、関数が終了するとメモリの割り当てが解除されるかどうかです。