| 操作 | 作用對象 | 效果 | 典型用途 |
|---|---|---|---|
memset(ptr, 0, size) | 指標**指向的記憶體區塊** | 將內容逐位元組設為 0 | 結構體/陣列清零、緩衝區初始化 |
ptr = NULL | **指標變數本身** | 指標值設為 0(空指標) | 釋放後防野指標、延遲初始化標記 |
struct Node *p = malloc(sizeof(Node)); memset(p, 0, sizeof(Node)); // 正確:清零結構體內容 p = NULL; // 錯誤時機:這裡會導致記憶體洩漏(未 free 就丟失位址) free(p); p = NULL; // 正確:free 後置 NULL,防雙重釋放/野指標
一個 malloc 對應一個 free。若結構體內含指標指向另一塊 malloc 記憶體,必須**先 free 內層指標,再 free 結構體本身**,否則內層記憶體洩漏。
static char *global_ptr = NULL; // 編譯期自動置 0,非野指標 // 等價於 static char *global_ptr; // .bss 區自動零初始化
NULL 只是位址 0x0,不映射任何有效儲存單元memset 操作的是**資料區**,ptr=NULL 操作的是**指標變數本身**