0

私はsplintCコードを実行していますが、次のステートメントが表示されました。

jmptable.c:34:5: Implicitly only storage vm->jumptable (type struct
     jumptable_entry **) not released before assignment:
     vm->jumptable = (struct jumptable_entry **)calloc(vm->jumptable_size + 1,
     sizeof(struct jumptable_entry *))

  A memory leak has been detected. Only-qualified storage is not released
  before the last reference to it is lost. (Use -mustfreeonly to inhibit
  warning)

スプリントがfreeメモリを割り当てる前にメモリを要求していることは理解していますcallocが、これはアプリケーションのまさに初期化であるため、心配する必要がありますか?

編集:これは vm->jumptable が初期化される方法です

vm->jumptable = (struct jumptable_entry**) calloc(vm->jumptable_size + 1,
                                          sizeof(struct jumptable_entry*));
4

1 に答える 1

0

はい、これが最初の課題です。しかし、次の課題はどうなるでしょうか? vm->jumptable が null でない場合、メモリを解放するチェックを追加する必要があります。

編集/明確化:構造の初期化がいつでも特定のポインターを変更するために呼び出すことができるメソッドで行われる場合、含まれているコードの断片からは明らかではありません。その場合、次に値を割り当てようとすると (したがって現在の値が変更されます)、メモリ リークが発生します。そのメソッドでは、前のインスタンスから割り当てられたメモリが解放されていることを確認することが不可欠です。

したがって、初期化に使用するのと同じ方法を使用してコード内の値を再割り当てしないことが絶対に確実な場合にのみ、メッセージを無視できます。

于 2013-11-05T09:11:20.660 に答える