我在一段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)我知道splint希望我在使用calloc分配内存之前先free它,但既然这是在应用程序的初始化阶段,我应该担心它吗?
编辑:这是vm->跳转表的初始化方式
vm->jumptable = (struct jumptable_entry**) calloc(vm->jumptable_size + 1,
sizeof(struct jumptable_entry*));发布于 2013-11-05 17:11:21
好的,这是第一个任务。但是下一次任务会发生什么呢?如果vm->jumptable不为空,则应添加检查以释放内存。
编辑/澄清:如果结构的初始化是在一个可以随时调用以更改特定指针的方法中完成的,则从您所包含的代码片段中看不出这一点。如果是这样,那么下次您将尝试赋值(从而更改当前值)时,将发生内存泄漏。在该方法中,确保从前一个实例中分配的内存已被释放,这一点至关重要。
因此,只有当您绝对确定不会使用初始化时使用的相同方法在代码中重新赋值时,才能忽略该消息。
https://stackoverflow.com/questions/19766315
复制相似问题