2012-04-21 20 views
0

に関する情報なし正しいメモリ解放これはばかげた質問のように聞こえるかもしれませんが、私は正しく、この場合にメモリを解放する方法についての情報を見つけることができませんでした:C++の割り当て

double*(そこを返す関数があると仮定この機能に関するその他の情報はありません)。さらに、以下のユースケースを想定します。上記のコメントに置かdelete[] ptr;は、バックトレース(?なぜ)を引き起こすため、

for (int i = 0; i < SIZE; i++) { 
    double *ptr = new double[3]; 

    /// do something with ptr, e.g., print 

    // delete[] ptr; 
} 

はどのようにして正しく、この場合にはメモリを解放しますか?

多くの感謝!

+2

問題はコードにあります。例えば、print'はヒープを壊してしまいます。 –

答えて

2

は全く正しいです。だからあなたの問題はどこか別の場所になければなりません。私はデバッガを使って何が起きているのかを確認することをお勧めします。もしあなたがLinuxシステムを使っているなら、valgrind/helgrindを試してみることをお勧めします.-それはかなり素敵です -

+0

情報ありがとう! – mo5470

4

この機能次に

あなたがメモリを解放する方法を知ることができない程度利用可能なその他の情報はありません。関数のソースコードをお持ちの場合はそれを参照してください。そうでない場合は作成者に連絡するか、デバッグツールを使用してメモリの割り当て方法を調べてください。生のポインタは、それを解放する方法を知るために必要な情報を単に伝えません。 2番目の、無関係なケースについては

問題は、(あなたは、このようなnewオーバーロードなどのトリックを実行しなかったと仮定して)「do something」の部分でなければなりませんので、delete[]は正しいです。

double *ptr = new double[3]; 

delete[] ptr; 

を行う

+0

ありがとうございます。 私の思考の中で欠けているリンクが見つかりました。私が調べているAPIのドキュメンテーションの詳細を掘り下げて、void戻り型とoutパラメータdouble [3]を持つ関数の実装が見つかりました。 – mo5470