C語言中,malloc, alloc, free是c定義的一組內存管理的API函數,free可以釋放calloc, malloc, realloc動態分配的空間,當你調用malloc、alloc分配內存時,不僅僅是從堆里面分配得到了可用內存,實際上內存管理子系統還會維護了內存列表(你定義的普通指針不會出現這個列表中)。
而對於使用new, GlobalAlloc之類的方式分配的內存可不可以使用free呢。我的回答是,盡量不要,大部分情況都會帶來風險,這里面涉及new, malloc, GlobalAlloc, HeapAlloc, LocalAlloc,VirtualAlloc等函數的區別。
那么對於自己定義的普通指針呢,首先要說一下,你要釋放的不是你定義的指針,而是你定義的指針指向的空間。至於你定義的普通指針是不是可以通過free釋放,這個要看情況。如果你定義的指針指向動態分配的地址空間,則可以使用free釋放指針指向的這段空間;否則,就不能使用free釋放指針指向的空間。


