0

メモリ リークと GDI リークがどのように発生するか、およびそのようなリークを削除する方法を学習するために、Winforms で (C を使用して) サンプル コードを記述しようとしています。GUI にいくつかの文字を表示する簡単なアプリケーションを作成しました。

メモリと GDI リソースに関してリークを発生させるにはどうすればよいですか?

4

2 に答える 2

1

GDIリソースをリークしたい場合は、フォントやブラシなどを作成し、それらを破棄しないことでうまくいくはずです。これらは基本的に、DeleteObject関連するリソースを解放するために呼び出す必要があります(もちろん、プロセスを終了するとクリーンアップされます)。 .

削除が必要としてリストされたオブジェクトの作成を確認することで、リークを追跡DeleteObjectできます。また、もう少し高度な処理を行って、PEB と TEB で未処理の GDI ハンドルを確認することもできます。EnumObjectsこの点でも役立つはずです。

于 2012-10-11T07:43:24.763 に答える
0

私は GDI にはあまり詳しくありませんが、プログラムを別の場所にリークさせるのは非常に簡単です。以前に malloc したメモリを解放するのを忘れるだけです。

例:

int someFunc() {
    char* buf = (char*)malloc(50);

    // Do stuff

    // Should free here like this:
    // free(buf);
    return 4;
}

解放しないと、メモリにアクセスできないため、メモリがリークされますが、プログラムにはまだ割り当てられています。

于 2012-10-11T07:18:30.500 に答える