我有一个奇怪的问题,我无法使用指向指针的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解决了这个问题。
答案 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
所指向的对象的大小。