-2

二重削除、メモリ リーク、スタック メモリの削除の違いは何ですか? これらの各エラーの原因となる条件は何ですか? このテストの質問 5 を参照して質問します。このことに関しては、良い習慣と悪い習慣が何であるかについてあまり詳しくないので、ガイドライン/ヒントをいただければ幸いです。

4

1 に答える 1

1

参照されているリンクには、すでに回答が記載されたテストが含まれているため、テストの回答をさらに明確にすることが不正行為に役立つとは思いません。

正しいプログラムは、newの呼び出しごとに、削除する呼び出しを常に1つだけ実行します。これらはすべてこの規則の違反です。

二重削除呼び出しは、複数回削除を呼び出します。

A* p = new A;
if ( someOption )
    delete p;

... more code ...
delete p;    // p is double freed if someOption is true
return;

メモリリークは、deleteをまったく呼び出しません。

A* p = new A;
if ( someOption )
    delete p;    // p leaked if someOption is not true
return;

また、スタックメモリ呼び出しを削除すると、newから返されていないメモリが削除されます。

A a;

A* p;
if ( someOption )
    p = &a;
else
    p = new A;

delete p;    // p is deletion of stack memory if someOption is true
于 2012-10-27T21:19:45.800 に答える