动态数组的 C 静态指针



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

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;
}

是的,这将(几乎(起作用。 如果使用多个线程访问此结构,它将失败。

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

叫1 -- 数据块[1] 集合

2 -- 数据块[2] 集合

3 -- dataBlock[3] set -- outs outs。

相关内容

  • 没有找到相关文章

最新更新