2017-01-17 12 views
0

Я использую VLFeat обучить гауссовой смеси Модель (GMM), и я не уверен, если я должен вручную освободить память, когда используются следующие команды:Должен ли я явно освобождать память при использовании vlfeat?

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); 

Спасибо!

ответ

0

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

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

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

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

+0

Спасибо. Но я не знаю, как была реализована функция 'vl_gmm_get_means (gmm);', так как это была встроенная функция, а исходный код недоступен ... Тем не менее я мог бы попытаться «vl_free» что-нибудь для безопасности, хотя .. , – Lotayou