Splint有趣的错误消息

时间:2013-11-04 11:00:36

标签: c splint

我在一段C代码上运行splint,它给了我以下声明:

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->跳转表的初始化方式

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

1 个答案:

答案 0 :(得分:0)

好的,这是第一个作业。但是会发生什么下一次作业?如果vm-> jumptable不为null,则应添加一个检查以释放内存。

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

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