C 堆分配硬编码结构数组

标签 c arrays pointers struct

我无法弄清楚如何分配硬编码数组堆。

假设我有以下结构:

struct my_struct
{
    ...
};

struct holder
{
    my_struct *array_of_struct;
    ...
};

不过,现在要创建一个struct holder 的实例,struct my_struct 的数组必须是硬编码的,例如:

struct holder *new_holder()
{
    struct holder *my_holder = malloc(sizeof(struct holder));
    if (my_holder == NULL)
        exit(-1);

    struct my_struct arr[] = {mystruct_instace_1, mystruct_instance_2, ...};
    holder->array_of_struct = arr;
    return holder;
}

这个分配虽然不会工作,因为它指向堆栈分配的 arr。我将如何分配 holder->array_of_struct 堆?

最佳答案

super 懒惰的方法是将数组从 malloc() 复制到缓冲区中,如下所示:

struct my_struct arr[] = {mystruct_instace_1, mystruct_instance_2, ...};
holder->array_of_struct = malloc(sizeof(arr));
assert(holder->array_of_struct);
memcpy(holder->array_of_struct, arr, sizeof(arr));
return holder;

我所说的“ super 懒惰”是指“编写的代码行数最少”。

关于C 堆分配硬编码结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35074158/

相关文章:

c - 在 C 中构建字符串

c++ - 如何在 C++ Visual 2010 中检查指针是否为空

c - 通过指针访问相同的结构或将结构存储在局部变量中?

c - 将语句字母切换为整数

c - C编程语言中的putch()和putchar()有什么区别?

在嵌入式 C 编程中检查 GPIO 状态

c - 动态规划 - C 中的最小硬币数

python - 如何有效地切片 numpy 数组

Java教科书: "the size of an array must be known at compile time"

python - 根据索引列表有效地从列表中删除元素