首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Splint滑稽错误消息

Splint滑稽错误消息
EN

Stack Overflow用户
提问于 2013-11-04 19:00:36
回答 1查看 343关注 0票数 0

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

代码语言:javascript
复制
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->跳转表的初始化方式

代码语言:javascript
复制
vm->jumptable = (struct jumptable_entry**) calloc(vm->jumptable_size + 1,
                                          sizeof(struct jumptable_entry*));
EN

回答 1

Stack Overflow用户

发布于 2013-11-05 17:11:21

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

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

因此,只有当您绝对确定不会使用初始化时使用的相同方法在代码中重新赋值时,才能忽略该消息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19766315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档