2017-02-14 133 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