2013-11-04 32 views
0

我正在一块的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*)); 
+2

这里我们需要看到更多的代码,以真正了解发生了什么事情。 – Avery

+0

需要显示VM-> jumptable'是如何'初始化。 – chux

回答

0

OK,这是第一次分配。但什么事情发生下一个任务?如果vm-> jumptable不为空,您应该添加一个检查以释放内存。

编辑/澄清:这是不是从如果结构的初始化中,可以调用随时更改的特定指针移动方法,完成已包含的代码片段明显。如果确实如此,那么下次您尝试分配一个值(从而更改当前值)时会发生内存泄漏。确保在该方法中释放先前实例的已分配内存至关重要。

所以,如果你是绝对肯定的,你不打算使用您使用的初始化相同的方法来重新分配在代码中的值,你只能忽略该消息。