无法将 NULL 分配给指针

Unable to assign NULL to a pointer

我遇到了一个奇怪的问题,我无法用对指针的 N​​ULL 赋值来解释。这是我的测试结构:

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 上的硬故障),我也不确定在带有指针的结构上使用 memset 是否是一个好习惯。从 my_function 中删除 NULL 分配并在 my_function 之外使用 test.buffer_pntr=NULL 解决了问题。

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

应该是

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

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

问题在这里:

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

我假设你想将结构归零,但 handler 是一个指针,所以当你说 &handler 时,你正在获取一个指向该指针的指针并将其归零。如此有效,你在做

handler = NULL;

然后取消引用指针导致了问题。如果你想将你需要做的结构归零

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

那当然不用单独把里面的指针置为NULL了。