wcsdupのような関数は、暗黙的にmallocを呼び出して、宛先バッファーにメモリーを割り当てます。メモリの割り当てはあまり明示的ではないので、ストレージを明示的に解放するのは論理的だと思いましたか?これは設計のジレンマに似ており、その理由と反対の理由は次のとおりです。
理由で解放する必要があります
- 解放しないと、メモリリークが発生します。
- wcsdup / _wcsdupがmallocを呼び出して、C ++プログラムから呼び出された場合でも、メモリを割り当てることは十分に文書化されています。
なぜなら解放されるべきではない
- wcsdupによって蓄積されたメモリは、プログラムの終了時に最終的に解放されます。プログラムの存続期間中、常にメモリリークが発生します(バッファサイズが大きい場合にwcsdupを頻繁に呼び出す場合を除く)。
- freeの前に明示的なmallocがなかったため、混乱する可能性があります。
- これは標準の一部ではありませんが、posixに準拠しているため、Microsoftの実装では、宛先バッファーの割り当てにmallocを使用しない場合があります。
アプローチはどうあるべきですか?