gpt4 book ai didi

c - 如何在指针上正确使用 malloc?

转载 作者:太空宇宙 更新时间:2023-11-04 01:31:34 27 4
gpt4 key购买 nike

我有以下结构并尝试使用 malloc 动态创建一个新对象。它现在似乎可以使用 object_ptr obj_ptr1 = malloc(sizeof(object_ptr)); 这只将 object_ptr 的指针大小分配给 obj_ptr1 ?但是在这种情况下如何分配原始结构 _object_t 的大小?

typedef struct
{
int struct_id;
void *(*function)(void *);
int status;
} _object_t;

typedef struct _object_t* object_ptr;

/* create a new object */
object_ptr obj_ptr1 = malloc(sizeof(object_ptr));

最佳答案

指针类型的 Typedef 通常不是一个好主意,因为它们会使判断类型名称是否指代指针类型变得困难。

建议:

typedef struct { /* ... */ } object_t;
object_t *obj1 = malloc(sizeof *obj1);

如果你想为 N 个对象的数组分配空间:

object_t *obj1 = malloc(N * sizeof *obj1);

请注意,我已经从类型名称中删除了前导下划线。以下划线开头的标识符保留给实现;您不应该在自己的代码中定义它们。

malloc(sizeof *foo) 习惯用法可能需要一点时间来适应,但这意味着您不必多次指定类型名称,从而避免了错误。 (*obj1 实际上并没有取消引用 obj1,因为 sizeof 的操作数未被评估。)

在您的代码中:

object_t obj1 = malloc(sizeof(object_t));

因为 object_t 是指针类型,所以您要分配足够的内存来容纳指针对象,而不是结构对象。 (分别对指针和结构类型使用类似的名称 object_t_object_t,无疑造成了混淆。)

关于c - 如何在指针上正确使用 malloc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21690319/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com