0

我正在运行splint一段 C 代码,它给了我以下语句:

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 不为空,您应该添加一个检查以释放内存。

编辑/澄清:如果结构的初始化是在可以随时调用以更改特定指针的方法中完成的,那么从您包含的代码片段中看不出是什么。如果是这样,那么下次您将尝试分配一个值(从而更改当前值)时,将发生内存泄漏。在该方法中,确保释放前一个实例中分配的内存是必不可少的。

因此,如果您绝对确定不会使用与初始化相同的方法重新分配代码中的值,则只能忽略该消息。

于 2013-11-05T09:11:20.660 回答