动态内存会被自动释放吗

来源:互联网 发布:孔子五十知天命 编辑:程序博客网 时间:2024/06/09 20:54

来自:高质量c++编程指南

函数体内的局部变量在函数结束时自动消亡。很多人误以为示例7-6是正确的。理由是p是局部的指针变量,它消亡的时候会让它所指的动态内存一起完蛋。这是错觉!

 

    void Func(void)

{

    char *p = (char *) malloc(100); // 动态内存会自动释放吗?

}

示例7-6 试图让动态内存自动释放

 

    我们发现指针有一些“似是而非”的特征:

1)指针消亡了,并不表示它所指的内存会被自动释放。

2)内存被释放了,并不表示指针会消亡或者成了NULL指针。

这表明释放内存并不是一件可以草率对待的事。也许有人不服气,一定要找出可以草率行事的理由:

如果程序终止了运行,一切指针都会消亡,动态内存会被操作系统回收。既然如此,在程序临终前,就可以不必释放内存、不必将指针设置为NULL了。终于可以偷懒而不会发生错误了吧?想得美。如果别人把那段程序取出来用到其它地方怎么办?