ログ日記

作業ログと日記とメモ

mallocの使いどころが分からない

既存のAPImalloc前提の場合は置いといて、自分で構造体を作る場合。


例えばデータの数が多い場合

struct very_long_list
{
  char *name;
  void *data;
};

static struct very_long_list *list_head;
static int list_count = 0;

struct very_long_list *very_long_list_add(char *name, void *data)
{
  ...
  // ここでmalloc、または呼び出し元でmallocする?
}

void do_something()
{
  int i;
  for (i = 0; i < list_count; i++){
    ...
  }
}

こういう感じ?



でもmallocで大量にメモリを確保するならコールバック関数を渡して

typedef void (callback_func)(struct very_long_list *);

void set_something_func(callback_func *callback)
{
  // 処理が複数の場合は関数ポインタの構造体を渡す
}

とすると、malloc要らないしメモリも使わないような。



というわけで、たぶん基本的な部分が分かっていない。
GUIで現在のディレクトリのファイル一覧を常に表示しておく、とかだと使うのかな?
その場合はGUIの部品を生成するタイミングでGUIAPIに沿ってメモリを確保するので、やっぱり自分の作った構造体のメモリは動的確保しくていいような気がするが。
憶測で書いている。