1
void foo(const char* s) { }
foo("bar");
  1. メモリのbar割り当てはどこにありますか?
  2. 関数の引数で匿名文字列を操作するための最も快適でメモリリークのない方法は何ですか?(私はマジックストリングがあってはならないことを知っています、ただ好奇心が強いです。)
4

3 に答える 3

4

あなたの例では、引数は文字列リテラルであり、静的な有効期間があり、削除されることはありません。

于 2012-07-18T08:06:55.587 に答える
2

「バー」はデータセクションで定義されており、アドレスはあなたがそれを持っているすべての場所でそれを置き換えます。foo関数は、そのアドレスへのポインターを使用して呼び出されます。

于 2012-07-18T08:07:20.810 に答える
1

バーのメモリはコンパイル時に割り当てられます。したがって、割り当てを解除する必要はありません。

C++バイナリにはさまざまなセクションがあります。いくつかの例は、テキスト(コードが格納されている場所)、スタック、およびヒープです。読み取り専用の静的メモリのセクションもあります。そこに文字列が保存されると思います。

文字列はヒープ上にないため、解放する必要はありません。

于 2012-07-18T08:06:26.850 に答える