ヒープ使用エラーの検出
説明
ヒープのインターフェース(malloc、new、free など)がアプリケーションにより適切に使用されているかどうかをチェックします。以下の不適切な使用がチェックされます。
割当て(
malloc、newなど)に対する正しくない割当て解除(free、deleteなど)。以下に例を示します。char * p1 = (char *)malloc(23); /* Allocation using malloc. */ char * p2 = new char[23]; /* Allocation using new[]. */ char * p3 = new int; /* Allocation using new. */ delete p1 /* Error, allocated using malloc. */ free(p2); /* Error, allocated using new[]. */ delete[] p3; /* Error, allocated using new. */
ヒープブロックを2回以上解放しているかどうか。
大きすぎるヒープブロックを割り当てようとしているかどうか。
チェックを実行する理由
ヒープのインターフェースが正しく使用されているか確認します。
使用方法
リンカオプション :‑‑debug_heap
IDE で、 [プロジェクト]>[オプション]>[ランタイム解析]>[ランタイム解析]
チェック済みヒープは、アプリケーション全体にわたって通常のヒープを置換します。チェック済みヒープには、追加のヒープとスタックリソースが必要です。アプリケーションに 10 KB 以上のヒープと 4 KB のスタックがあることを確認してください。
割当て時のヒープブロックの最大サイズは、デフォルトで 1 GB です。この上限は以下の関数により変更できます。
size_t __iar_set_request_report_limit(size_t value);
この関数によって古い制限が返されます。この関数の宣言は、iar_dlmalloc.h にあります。詳細については、『iar_dlmalloc.h』を参照してください。
仕組み
すべてのヒープインターフェースの間違った使用について、メッセージが表示されます。
ライブラリにより提供されるチェック済みヒープを参照してください。
例
C-RUNランタイムエラー解析を使用するにあたってに記載された手順に従ってください。[デバッグヒープ]オプションを使用します。
これは、実行時に識別されるソースコードの一例です。
C-RUN は、ヒープの整合性違反またはヒープ使用エラーのどちらかについて報告します。これは、リストされるメッセージの一例です。
