Skip to main content

IAR Embedded Workbench for Arm 9.70.x

ヒープ使用エラーの検出

このセクションの内容:
説明

ヒープのインターフェース(mallocnewfree など)がアプリケーションにより適切に使用されているかどうかをチェックします。以下の不適切な使用がチェックされます。

  • 割当て(mallocnewなど)に対する正しくない割当て解除(freedeleteなど)。以下に例を示します。

    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ランタイムエラー解析を使用するにあたってに記載された手順に従ってください。[デバッグヒープ]オプションを使用します。

これは、実行時に識別されるソースコードの一例です。

crs_heap_usage_Hom7.1_M16_1.PNG

C-RUN は、ヒープの整合性違反またはヒープ使用エラーのどちらかについて報告します。これは、リストされるメッセージの一例です。

message_heap_usage_Hom7.1_M16_1.PNG