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



我有以下结构,并尝试使用 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,无疑导致了混淆。

问题出在您的 malloc 行中。您必须分配sizeof(_object_t)而不是sizeof(object_t)

相关内容

  • 没有找到相关文章

最新更新