簡體   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