c - 调整 malloc 数组的大小
问题描述
我有以下对象数组:
typedef struct MyStack {
size_t size; // current size of stack
size_t max; // max size of stack
Item* stack[];
} MyStack;
我想创建一个包含十个项目的堆栈,所以我这样做:
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");
}
推荐阅读
- r - 不知道如何将“x”转换为“日期”类
- r - 如何在 r 中编写一个函数来对记录进行计算?
- php - 如何从 Laravel Controller(Laravel 最新版本)的查询结果中导出 excel 文件?
- artifactory - 修复将工件上传到工件时的 CHECKSUM 错误
- javascript - Nodemailer 在本地工作,但不在 lambda
- python-3.x - 递归地展平列表列表
- python - 时间序列数据框中的反向行
- aws-cdk - 如何在 AWS CDK 中创建没有值的 Parameter Store 条目?
- firebase - 在 firebase 数据库中订购 Childs 时,firebase 究竟使用了什么
- java - 打开 jar 中文件的输入流