C 中的动态数组创建,创建动态数组的函数

问题描述 投票:0回答:1

我是 C 新手,有一个关于动态数组的问题。

我正在构建一个游戏,以便当用户输入 6 个数字使其与代码生成的 6 个随机数匹配时,用户获胜。

我正在尝试创建一个动态数组来存储用户的猜测,直到用户正确得到答案。但是,我不确定这将如何运作。我是否会创建一个函数,以便每当用户得到错误的答案时,我都会调用该函数来创建一个新的动态数组来存储用户的猜测?

c dynamic dynamic-arrays
1个回答
0
投票

一个可以动态增长的“向量”需要跟踪什么?

  • 当前尺寸。
  • 分配的内存大小。
  • 一块(指向一块)动态分配的内存。

可以存储

int
值的一个。

typedef struct int_vec {
    size_t sz;
    size_t allocated_sz;
    int *data;
} int_vec_t;

当你想分配向量时:

int_vec_t *make_int_vec(size_t starting_capacity) {
    int_vec_t *vec = malloc(sizeof(*vec));
    if (!vec) return NULL;

    vec->data = malloc(sizeof(int) * starting_capacity);
    if (!vec->data) {
        free(vec);
        return NULL;
    }

    vec->sz = 0;
    vec->allocated_sz = starting_capacity;

    return vec;
}

当您希望向量增长时,最好以 +1 以外的因子来实现。为了简单起见,我们使用 x2。您可以使用

realloc
来完成此操作,但如果
realloc
失败,我们将使用
vec->data
之外的指针来测试它,这样我们就不会让原始指针悬空。一旦我们知道它成功了,我们就可以将其分配给
vec->data

int_vec_t *grow_int_vec(int_vec_t *vec) {
    if (!vec) return NULL;

    int *new_data = realloc(vec->data, sizeof(int) * vec->allocated_sz * 2);
    if (!new_data) return NULL;

    vec->data = new_data;
    vec->allocated_size *= 2;

    return vec;
}
© www.soinside.com 2019 - 2024. All rights reserved.