free 真正释放的是 p1 指向的那一块用 malloc 申请的内存空间,一般释放了之后我们会将 p1 = NULL;这样是为了防止 p1 变成野指针。free并不会释放 p1 在地址空间申请的本身4个字节的内存,p1 还能正常使用,只不过 free 之后 p1指向了一个随机的内存地址。
释放的是 申请的那4个字节的内存,p1本身不会被释放。
这段程序的bug问题是 你最后释放p1指向的地址空间不是由malloc开辟的。