Splint смешное сообщение об ошибке

Я запускаю splint на фрагменте кода C, и он дал мне следующее утверждение:

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 хочет, чтобы я free выделил память перед ее выделением с помощью calloc, но поскольку это происходит в самой инициализации приложения, стоит ли мне об этом беспокоиться?

Изменить: так инициализируется vm-> jumptable

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

person Ferenc Deak    schedule 04.11.2013    source источник
comment
Нам нужно увидеть еще немного кода, чтобы действительно понять, что происходит.   -  person Avery    schedule 04.11.2013
comment
Нужно показать, как инициализируется vm->jumptable.   -  person chux - Reinstate Monica    schedule 05.11.2013


Ответы (1)


Хорошо, это первое задание. Но что произойдет следующее задание? Вы должны добавить проверку на освобождение памяти, если vm->jumptable не равен нулю.

РЕДАКТИРОВАТЬ/Пояснение: из фрагмента кода, который вы включили, не очевидно, выполняется ли инициализация структуры методом, который можно вызвать для изменения конкретного указателя в любое время. Если это так, то в следующий раз, когда вы попытаетесь присвоить значение (таким образом, изменив текущее значение), произойдет утечка памяти. В этом методе важно убедиться, что выделенная память из предыдущего экземпляра освобождена.

Таким образом, вы можете игнорировать сообщение только в том случае, если вы абсолютно уверены, что не собираетесь переназначать значение в своем коде, используя тот же метод, который вы используете для инициализации.

person ThunderGr    schedule 05.11.2013