2013-11-04 33 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不爲空,您應該添加一個檢查以釋放內存。

編輯/澄清:這是不是從如果結構的初始化中,可以調用隨時更改的特定指針移動方法,完成已包含的代碼片段明顯。如果確實如此,那麼下次您嘗試分配一個值(從而更改當前值)時會發生內存泄漏。確保在該方法中釋放先前實例的已分配內存至關重要。

所以,如果你是絕對肯定的,你不打算使用您使用的初始化相同的方法來重新分配在代碼中的值,你只能忽略該消息。