2017-02-14 134 views
0

我有一個模塊化的C程序,其中每個模塊使用靜態全局變量共享訪問模塊功能之間的變量,但不能訪問其他模塊。現在需要一個動態分配的數組,可以對所有模塊函數進行類似訪問,但我不熟悉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