我有一个模块化的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;
}

最佳答案

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

pushData中存在缺陷。它将第一个元素放置在dataBlock [1]处。假设大小为3:

呼叫
1-设置了dataBlock [1]

2-设置了dataBlock [2]

3-dataBlock [3]设置-超出范围。

关于c - 动态数组的C静态指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42231813/

10-10 18:26