Обычно вы звоните бесплатно, когда уверены, что закончили использовать выделенный указатель. Также рекомендуется указывать, должны ли возвращаемые значения быть свободными или нет. Вот один пример организации метода в C:
int main() {
//let's start our method with initializing any declarations
int mystringlen = 25;
char* mystring1 = NULL;
char* mystring2 = NULL;
//let's now assign some data
mystring1 = malloc(mystringlen * sizeof(char));
if (mystring1 == NULL) goto end; //malloc failure :(
strncpy(mystring1, "Hello world", mystringlen);
//strdup(3) mallocs its return value, we should be careful and check
//documentation for such occurances
mystring2 = strdup("hello world");
if (mystring2 == NULL) goto end; //malloc failure
//let's do our processing next
printf("%s\n%s\n", mystring1, mystring2);
//let's do our cleanup now
end:
if (mystring1) free(mystring1);
if (mystring2) free(mystring2);
return 0;
}
Есть несколько доступных соглашений, и некоторые могут возражать против использования goto для управления потоком. Обратите внимание, что мы установили наши указатели на NULL
, чтобы впоследствии мы могли выполнить безопасную очистку. Мы также проверяем ошибки mallo c, что является хорошей практикой.