2017-04-17 5 views
1

私はキロをポンドとストーンに変換するコードを書いた。スニペットを以下に示します。C++。メモリを解放するCスタイルの配列を削除するとき

float *weightoutput = weight_conversion(weight); 

以下のような機能を持つ。私はCスタイルの配列、

float* weight_conversion(float x){ 

float *stones_pounds = new float[2]; //C-style array 
float z, y; 
z = x*0.15747304441776971; // (1 stone = 6.3503 kilo) 
y = x*2.2026;    // (1 kilo = 2.2026 pounds) 
stones_pounds[0] = z; 
stones_pounds[1] = y; 

return stones_pounds; 
}  

を使用し、私はあなたが「新しい」を使用している場合、あなたは私が持っているmemory.Theの質問を解放するために「削除」するために使用する必要があること、複数の記事で読んだことがどのようにできた、ありますこの設定でstones_poundsを削除します。 stones_poundsは関数内の最後の行まで使用されるため、関数内でdelete [] stones_poundsを使用することはできません。グローバル変数ではないので、main関数内でもそれを削除することはできません。ですから、delete []演算子を使ってメモリを解放するにはどうしたらいいですか? delete []演算子を容易にするコードの構造を変更する唯一の代替方法はありますか?

+7

なぜ 'std :: vector'や' std :: array'を使わないのですか?編集:この場合、実際にはおそらくより明確になる 'std :: pair 'を返すことができます – RyanP

+0

[配列の返り値について](http://stackoverflow.com/questions/27410943/returning)を参照してください。 -a-function-in-cからの-arrays) Cスタイルの配列をリターンで使用することはできますが、 'new []'を(structを使って)まったく使用する必要はありません。 – PaulMcKenzie

+0

地獄、なぜ単に 'struct'を返さないのですか? – Donnie

答えて

2

std::arrayは、この例ではnewまたはdeleteを使用する場合、おそらくより良い選択です。

これで、new -edポインタが返され、結果はfloat *weightoutputとして保存されます。メモリを解放するには、delete [] weightoutput;で完了したらdeleteに電話する必要があります。

+0

合意した、std :: arrayは良い選択です。私はstd :: arrayで 'new'を置き換えますが、好奇心が私のほうを良くしました。だから私は上に移動する前にこれを試したかった。 –

関連する問題