Нужно ли явно освобождать память при использовании vlfeat?

Я использую VLFeat для обучения модели смеси Гаусса (GMM), и я не уверен, должен ли я вручную освободить память при использовании следующих команд:

float *means = (float *) vl_gmm_get_means(gmm);
float *covariances = (float *) vl_gmm_get_covariances(gmm);
float *priors = (float *) vl_gmm_get_priors(gmm);

Нужно ли вручную писать следующие коды?

free(means);
free(covariances);
free(priors);

Спасибо!

1 ответ

  1. Не знаю, что вы подразумеваете под «пусть Visual Studio делает свою работу»…

    Если выделена память, ее необходимо освободить. C++ не является языком сбора мусора, поэтому все выделение/освобождение памяти является явным через new/delete (или malloc/free).

    Я никогда не использовал рассматриваемую библиотеку (VLFeat), но я погуглил ее функции выделения памяти. Я думаю, что вы должны использоватьvl_free(), чтобы освободить память, возвращенную библиотекой. Реализация может просто обернуть free()или какую-то другую функцию, но обычно для таких библиотек, как эта, следует использовать функции lib для управления памятью, возвращенной из lib.

    Документация по vl_free()состояниям: эта функция освобождает блок памяти, выделенный vl_malloc, vl_calloc или vl_realloc. Синопсис совпадает с функцией POSIX malloc.