3

functionを宣言するがある場合int、最後にメモリを節約するためにfunctionそれを「解放」する必要がありますか?int

例:

void doSomething() {
    int x = 0;
    // do something with x
    free(x); // needed?
}
4

7 に答える 7

14

ここにあなたのための記憶管理の戒めがあります

  • あなたはmalloc'edまたはcalloc'edしたものだけを解放しなければならない
  • あなたは新しくしたものだけを削除しなければならない
  • 新しく[]したものだけを[]削除しなければならない
  • 可能な限りRAIIを使用する必要があります
于 2013-03-21T13:57:07.207 に答える
5

いいえ。これは自動変数です。つまり、スコープ外になると割り当てが解除されます。

free()また、 C++ ではめったに使用しません。これは C 関数です。

于 2013-03-21T13:54:10.803 に答える
1

いいえ、を使用して動的にメモリを割り当てた場合にのみ、メモリを解放する必要がありますnew。この場合、この変数はスタックにあり、関数が終了すると破棄されます。

于 2013-03-21T13:54:44.850 に答える
1

いいえ。intオブジェクトには自動保存期間があります。スコープの終わり、つまり関数の終了時に破棄されます。

freeいずれにせよ、C++で使用するべきではありません。mallocメモリの割り当てに使用した場合にのみ使用されますがmalloc、C++ ではあまり使用されません。new代わりに、オブジェクトを動的に割り当てるために使用する必要があります。で動的保存期間を持つオブジェクトを作成した場合はnew、 を使用deleteしてそれを破棄します。

于 2013-03-21T13:54:11.780 に答える
1

いいえ

xはスタック変数であり、リターン時に自動的に削除されdoSomething()ます。

手動で割り当てたオブジェクトのみをdにするmalloc()必要があります(C++ では非常にまれです)。また、C++ ではandをfree()使用しないでください。代わりにandを使用してください。free()malloc()newdelete

于 2013-03-21T13:54:19.233 に答える
0

コードでメモリを割り当てた変数のみを解放する必要があります。あなたの例xでは、ローカルで宣言されており、プログラムはスタックにメモリを割り当てます。関数の最後で、変数は自動的に破棄されます。したがって、心配する必要はありません。

于 2013-03-21T13:55:03.463 に答える