无法将NULL分配给指针

时间:2019-05-26 09:17:10

标签: c cortex-m

我有一个奇怪的问题,我无法使用指向指针的NULL赋值来解释。这是我的测试结构:

typedef struct
{
    uint8_t *buffer_pntr;
    uint8_t size;
    uint8_t some_other_stuff;
}my_struct_t;

void my_function (my_struct_t *handler)
{
    memset(&handler,0,sizeof(handler);
    handler->buffer_pntr=NULL;
}

void main(void)
{
   my_struct_t test;
   my_function(&test);
}

我想调用my_function将我的结构设置为已知状态,因为我在main内部声明了我的结构,因此它变为局部状态,并且局部变量状态未知。问题是分配NULL会导致系统崩溃(cortex-m4上的Hardfault),我也不确定在带指针的struct上使用memset是否是一个好习惯。从my_function中删除NULL分配,并在my_function外部使用test.buffer_pntr = NULL解决了这个问题。

2 个答案:

答案 0 :(得分:4)

问题在这里:

memset(&handler,0,sizeof(handler));

我假设您想将结构归零,但是handler是一个指针,因此当您说&handler时,您将指向该指针并将其归零。如此有效地做到了

handler = NULL;

然后取消引用指针会导致问题。如果您想将结构归零

memset(handler,0,sizeof(*handler));

然后,当然,您无需将内部指针单独设置为NULL。

答案 1 :(得分:3)

memset(&handler,0,sizeof(handler));

应该是

memset(handler,0,sizeof(*handler));

由于handler已经是指针,因此关于sizeof(handler)是指针的大小,您需要传递handler所指向的对象的大小。