Я изучаю C и меня интересует подход «лучшей практики» к написанию функций. Желательно ли возвращать указатель на динамически создаваемую память или заполнять блок памяти, который был статически распределен?Каковы последствия возврата указателя в качестве противопоставления заполнению параметра?
Пожалуйста, рассмотрим функции allocatef
и populatef
в качестве примера
char* allocatef(size_t size){
char* result = malloc(8*size);
// do other stuff
return result;
}
, который мы можем взаимодействовать, через main
следующим образом
int main(void){
char* data = allocatef(sizeof(int));
// do stuff
free(data);
}
Как противостоять такому подходу, когда функция ожидает данные должны быть созданы
void populatef(char* data){
// do stuff
}
и память статически распределена в main
, что избавляет нас от потенциальной утечки памяти. Возможно, одним из недостатков является то, что вызывающий абонент должен знать точный тип ввода populatef
.
int main(void){
char data[8 * sizeof(int)];
populatef(data);
// no need to perform a destroy
}
Я нашел некоторые важные вопросы here и here, но эти опасения C++ и производительности соображений. Меня больше интересует безопасность памяти и стандартное поведение среди опытных программистов С.
В C? Это подразумевает, что теперь есть проблемы с владением, о которых нужно беспокоиться. : P – cHao
Пожалуйста, объясните подробнее. – jesterII
Ваше решение будет принято. –