动态数组的C静态指针

动态数组的C静态指针,c,dynamic,malloc,C,Dynamic,Malloc,我有一个模块化的C程序,其中每个模块使用静态全局变量来共享模块功能之间的变量访问,但不访问其他模块。现在需要一个动态分配的数组,所有模块函数都可以访问它,但我不熟悉malloc。下面是我正在尝试做的一个简单示例。这似乎是正确的方法,但我很害羞,因为我找不到任何类似的例子(而且真实的事情要复杂得多)。我是否可以像这样维护一个静态指针,并使用malloc和free分配内存块来来去去去,但保留一个指向当前块的良好指针 static int *dataBlock = NULL; static int d

我有一个模块化的C程序,其中每个模块使用静态全局变量来共享模块功能之间的变量访问,但不访问其他模块。现在需要一个动态分配的数组,所有模块函数都可以访问它,但我不熟悉
malloc
。下面是我正在尝试做的一个简单示例。这似乎是正确的方法,但我很害羞,因为我找不到任何类似的例子(而且真实的事情要复杂得多)。我是否可以像这样维护一个静态指针,并使用
malloc
free
分配内存块来来去去去,但保留一个指向当前块的良好指针

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;
}
是的,这(几乎)行得通。如果使用多个线程访问此结构,它将失败

pushData中存在缺陷。它将把第一个元素放在数据块[1]上。假设大小为3:

召唤 1--数据块[1]集

2--数据块[2]集


3--数据块[3]已设置--超出范围

你可以。如果是事实,我不明白为什么要将自己限制在任何特定的数据大小上。一旦当前限制用尽,您可以
realloc
块。同意缺陷并修复它(您是否应该删除该注释?)。请详细说明关于多线程的第一点