0

多くのメモリリークに問題があります。

CRTは、たとえば次のコードでリークを示しています。

char *cmd = new char[128];

私は何をすべきか?

char *cmd = new char[128];
delete[] cmd;

上記のコードを使用してVLD(Visual Leak Debugger)で新しいプロジェクトを開始しましたが、まだリークしていると表示されます。

4

4 に答える 4

3

基本的に、使用をやめたらすぐにメモリを解放する必要があります。

これを自動化するための優れた C++ テクニックには、RAIIスマート ポインターがあります。

また、メモリ リークに関するウィキペディアの記事も考慮してください。

于 2012-04-30T14:03:59.560 に答える
0

使用する:

std::vector<char> cmd(128);

char* バッファにアクセスする必要があるときはいつでも、次のことができます。

char* memory = &char[0]メモリは std::vector に対して継続することが保証されているためです。メモリはオブジェクトが所有しているため、削除する必要はありません。これにより、コードも例外に対して安全になります。たとえば、delete [] を実行する前に例外がスローされた場合にメモリ リークが発生しません。

スタックに割り当てたい場合は、C++ 11 の新しい std::array を使用することもできます

于 2012-04-30T15:15:54.757 に答える
0

配列に関係するメモリリークを避けるために、呼び出す必要がdelete[] arrayVariable;あります。delete arrayVariable;

于 2012-04-30T14:12:56.560 に答える