Я пишу библиотеку, которая будет использоваться многими приложениями. Есть ли предпочтительный способ выделения буфера? Должен ли пользователь malloc в основном приложении? Или библиотечная функция malloc? Обратите внимание, что производительность или использование пространства не вызывает беспокойства. Я спрашиваю больше о хорошей проектной перспективе для разработки API.Где находится пользовательский буфер malloc? Код пользователя или код библиотеки?
[1] Применение выделяет буферное пространство:
int main()
{
char **abc = malloc (1024*sizeof(char*));
abc[0] = malloc ..
abc[1] = malloc ..
foo(abc);
free_all(abc);
}
/*================================*/
//external API
void foo(char **abc) {
strncpy(abc[0], "hello\0", 6);
strncpy(abc[1], "world\0", 6);
//and so on
}
[2] библиотеки функций mallocs буфера
int main()
{
char **abc = NULL;
foo(&abc);
free_all(abc);
}
/*================================*/
//external API
void foo(char ***abc)
{
int num_elem = 32;
*abc = malloc (num_elem * sizeof(char*));
(*abc)[0] = malloc(6);
(*abc)[1] = malloc(6); //and so on
strncpy((*abc)[0], "hello\0", 6);
strncpy((*abc)[1], "world\0", 6);
//and so on
}
Пожалуйста, [примите ответ] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235), если это было полезно. – Spaceghost