gpt4 book ai didi

C 动态数组的静态指针

转载 作者:行者123 更新时间:2023-11-30 16:50:20 27 4
gpt4 key购买 nike

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

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 -- 数据 block [1]设置

2 -- 数据 block [2]设置

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

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com