私は自分のライブラリを作成していますが、ポインターの構文を理解しようと思ったときに、混乱し、Web で検索すると、さらに混乱します。
基本的にプールを作りたいのですが、実際にやりたいことは次のとおりです。
次の点を尊重する必要があります。
- オブジェクトをプールに追加すると、オブジェクトへの現在の配列のポインターが、ポインターの新しい配列 + 1 (新しいオブジェクトを含むため) に追加されます。
- 新しい配列は、私の foo 構造の「オブジェクト」によってポイントされます。
- 古い配列は解放されています。
- クリーンアップ関数を呼び出すと、プール内のすべてのオブジェクトが解放されます
構造をどのように定義すればよいですか?
typedef struct {
int n;
(???)objects
} foo;
foo *the_pool;
プールを管理するコードは次のとおりです。
void myc_pool_init ()
{
the_pool = (???)malloc(sizeof(???));
the_pool->n = 0;
the_pool->objects = NULL;
}
void myc_push_in_pool (void* object)
{
if (object != NULL) {
int i;
(???)new_pointers;
the_pool->n++;
new_pointers = (???)malloc(sizeof(???)*the_pool->n);
for (i = 0; i < the_pool->n - 1; ++i) {
new_pointers[i] = (the_pool->objects)[i]; // that doesn't work (as I'm not sure how to handle it)
}
new_array[i] = object;
free(the_pool->objects);
the_pool->objects = new_array; // that must be wrong
}
}
void myc_pool_cleanup ()
{
int i;
for (i = 0; i < the_pool->n; ++i)
free((the_pool->objects)[i]); // as in myc_push_in_pool, it doesn't work
free(the_pool->objects);
free(the_pool);
}
注: プールに追加されるオブジェクトのタイプは事前にわからないため、すべてのポインターを処理する必要があります 。フィードバックは大歓迎です。