3

C スタイルの文字列を再割り当てすると、メモリ リークが発生する可能性がありますか? そのようです:

char * s = "Hello!";
s = "Hello, world!";

私の質問はばかげているように見えるかもしれませんが、ご容赦ください。私は現在、まだ C++ のダミーです。

コードの 2 行目では、C スタイルの文字列のs方が長いので、内部でメモリを再割り当てしますか? これによりメモリリークが発生しますか? そして、私は電話する必要がありますdeleteか?

ありがとう

4

3 に答える 3

4

実際、技術的にはいいえ。文字列リテラルには、特別な静的割り当てが用意されています。見る

c++の文字列リテラルは静的メモリに作成されていますか?

于 2013-09-22T14:17:00.423 に答える
3

メモリ リークは、動的メモリ割り当てによって発生します。

ここには動的割り当てがないため、メモリ リークはありません。

実際、文字列リテラルには静的ストレージ期間があります。標準は次のように述べています(ドラフトn3690):

3.7.1 Static storage duration [basic.stc.static]

All variables which do not have dynamic storage duration, do not have thread storage duration, and are not local have static storage duration. The storage for these entities shall last for the duration of the program.

于 2013-09-22T14:17:07.753 に答える
1

動的メモリ割り当てがないため、リークはありません。あなたが持っているのは、実装定義の読み取り専用メモリのどこかに格納されている文字列リテラルを指すポインターです。

于 2013-09-22T14:15:46.743 に答える