[英]Memset struct pointer causing null check failure
我定义了一个结构,并有一个函数接收结构指针并填写相关信息,同时在开始时进行空检查。
粗略的例子:
typedef struct
{
int field;
} myStruct;
void myFunc(myStruct *ptr)
{
if(ptr == NULL)
{
printf("Pointer is null!");
}
// rest of code
}
int main()
{
myStruct *ptr = NULL; // tried both *ptr; and *ptr = NULL;
memset(&ptr, 0, sizeof(ptr));
myFunc(ptr);
return 0;
}
该程序只是我所做的一个示例,结果是它未通过NULL检查。
知道哪里可能出错吗? 也许memset不对吗?
ptr
的值为NULL
,所以它没有指向任何东西。 您需要将指针分配给有效内存才能取消引用。
您应该首先为其分配内存。
myStruct *ptr = malloc(sizeof(*ptr));
myFunc(ptr);
程序的输出应为Pointer is null!
在大多数平台上。
说明:
// setting ptr to NULL
myStruct *ptr = NULL; // declaring and initializing ptr to NULL, this is obvious
以下是更微妙的:
memset(&ptr, 0, sizeof(ptr));
这ptr
存储ptr
的地址处的sizeof(ptr)
字节设置为0,这实际上等效于ptr = 0;
。
现在,在大多数平台上, NULL
被定义为(void*)0
,因此在这些平台上ptr = NULL
等效于ptr = NULL
。
示范: http : //ideone.com/SwxaKv
简短答案:删除memset(&ptr, 0, sizeof(ptr));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.