【发布时间】:2014-03-08 13:23:55
【问题描述】:
我有以下结构并尝试使用 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));
【问题讨论】:
-
您可以通过将指针声明为指针并通过not casting the return value of
malloc()来做到这一点。 -
编辑后:现在它是一个指针,但您仍然分配了错误的大小。您正在分配指向
struct _object_t的指针的大小。也许你应该使用更有说服力的名字,比如struct object_t和object_ptr。 -
谢谢,我看到我的问题中的malloc只将object_ptr的大小分配给obj_ptr1,但是如何分配原始struct _object_t的大小呢?
-
@TonyGW 好吧,准确地写下
sizeof(_object_t)。 -
@Nabla,我也可以写 malloc(sizeof(object_ptr*)) 吗?隐藏原始结构名称对我来说很重要。谢谢