多くのアプリケーションで使用されるライブラリを作成しています。バッファを割り当てる好ましい方法はありますか? ユーザーはそれをメイン アプリケーションで malloc する必要がありますか? または、ライブラリ関数はそれをmallocする必要がありますか? パフォーマンスやスペースの使用は問題ではないことに注意してください。API を開発するための優れた設計の観点から、さらに質問しています。
[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
}