モジュールの機能間の変数の共有アクセスには静的グローバル変数を使用しますが、他のモジュールには使用できません。今度はすべてのモジュール関数に同様にアクセス可能な動的に割り当てられた配列が必要ですが、私はmalloc
に慣れていません。以下は私がしようとしているものの単純化された例です。これは正しい方法だと思われますが、似たような例は見つからないので(実際のところははるかに複雑なので)、私は恥ずかしがり屋です。このような静的ポインタを維持して、malloc
とfree
を使用して、現在のブロックに適切なポインタを保持しているすべてのメモリブロックを割り当てできますか?ダイナミックアレイ用C静的ポインタ
static int *dataBlock = NULL;
static int dataSize = 0, dataCursor = 0;
// Init - called externally
int initData(size) {
if (dataBlock || dataSize > 0) {
return -1;
}
dataBlock = malloc(sizeof(*dataBlock) * size);
if (!dataBlock) {
return -1;
}
dataSize = size;
dataCursor = 0;
return 0;
}
// Push - called externally
int pushData(value) {
if (dataCursor >= dataSize) {
return -1;
}
dataBlock[dataCursor] = value;
dataCursor++;
return dataCursor;
}
// Free - called externally
void freeData() {
free(dataBlock);
dataSize = 0;
dataCursor = 0;
dataBlock = NULL;
}
できます。実際には、なぜ特定のデータサイズに制限されているのかわかりません。現在の制限が使い尽くされると、ブロックを再割り当てすることができます。 – StoryTeller