调整 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
并更改其 size
和 max_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");
}
我有以下对象数组:
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
并更改其 size
和 max_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");
}