繁体   English   中英

Memset结构指针导致空检查失败

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM