无法将 NULL 分配给指针
Unable to assign NULL to a pointer
我遇到了一个奇怪的问题,我无法用对指针的 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 上的硬故障),我也不确定在带有指针的结构上使用 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了。
我遇到了一个奇怪的问题,我无法用对指针的 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 上的硬故障),我也不确定在带有指针的结构上使用 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了。