У меня есть модульная программа на C, где каждый модуль использует статические глобальные переменные для совместного доступа переменных между функциями модуля, но не к другим модулям. Теперь нужен динамически выделенный массив, который аналогично доступен для всех функций модуля, но я не знаком с malloc
. Ниже приведен упрощенный пример того, что я пытаюсь сделать. Это похоже на правильный способ сделать это, но я запутался, потому что я не могу найти подобных примеров (и поскольку реальная вещь намного сложнее). Могу ли я поддерживать статический указатель, подобный этому, и использовать malloc
и free
для выделения любых блоков памяти, которые приходят и уходят, но сохраняя хороший указатель на текущий блок?C статический указатель для динамического массива
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;
}
Вы можете. И если факт, я не понимаю, зачем ограничивать себя конкретным размером данных. Вы можете «перераспределить» блок после исчерпания текущего предела. – StoryTeller