调整 malloc 数组的大小

Resizing an malloc'ed array

我有以下对象数组:

typedef struct MyStack {
    size_t     size;      // current size of stack
    size_t     max;       // max size of stack
    Item*      stack[];
} MyStack;

我想创建一个包含 10 个项目的堆栈,所以我这样做:

MyStack stack = malloc(sizeof MyStack);
stack->size = 0;
stack->max = 10;
stack->stack = malloc(sizeof Item * 10);

然后假设我填满了堆栈 -- 我有十个项目。我想将堆栈的大小调整为 15 个项目。这样做的方法是什么,包括显然将现有的 10 个项目复制到新堆栈?根据定义,问题是否意味着在内存中的某一点我将分配 25 个项目? (这里不重要,但我可以想象如果有人有 2GB 的数据结构并且他们需要调整它的大小,这可能会导致很多问题)。

您只需添加一个包装器即可重新分配您的 stack 并更改其 sizemax_size 值:

void resize(Stack *stack, size_t new_size)
{
    stack->max_size = new_size;
    if(stack->size > stack->max_size)
         stack->size = stack->max_size;
    stack->stack = realloc(stack->stack, sizeof(Item) * new_size);
    if(stack->stack == NULL)
        errx(1,"error while resize");
}