2017-02-14 5 views
0

モジュールの機能間の変数の共有アクセスには静的グローバル変数を使用しますが、他のモジュールには使用できません。今度はすべてのモジュール関数に同様にアクセス可能な動的に割り当てられた配列が必要ですが、私はmallocに慣れていません。以下は私がしようとしているものの単純化された例です。これは正しい方法だと思われますが、似たような例は見つからないので(実際のところははるかに複雑なので)、私は恥ずかしがり屋です。このような静的ポインタを維持して、mallocfreeを使用して、現在のブロックに適切なポインタを保持しているすべてのメモリブロックを割り当てできますか?ダイナミックアレイ用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; 
} 
+0

できます。実際には、なぜ特定のデータサイズに制限されているのかわかりません。現在の制限が使い尽くされると、ブロックを再割り当てすることができます。 – StoryTeller

答えて

0

はい、これは(ほぼ)機能します。複数のスレッドを使用してこの構造体にアクセスすると、失敗します。

pushDataに問題があります。最初の要素はdataBlock [1]に配置されます。 3のサイズを仮定:

コール 1 - データブロック[1]

セット2 - データブロック[2]

セット3 - データブロック[3]セット - 境界のうち。

+0

が不具合について同意して修正しました(そのコメントを削除する必要がありますか?)。複数のスレッドについての最初の点について詳しく説明してください – robisrob

関連する問題