【发布时间】:2017-07-03 01:50:54
【问题描述】:
我有一个模块化 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;
}
【问题讨论】:
-
你可以。如果事实如此,我不明白为什么要将自己限制在任何特定的数据大小上。当前限制用完后,您可以
realloc阻止。