我们讲内存溢出时,首先看一下上面这张图,比如说你要往一个500ml的杯子里倒800ml的水,这样肯定是装不下的,水会溢出来,在我们电脑内存中也是一样的,你这个内存中就只有5M的内存空间,可是你要将8M的文件放入这个只有5M的内存中,就会发生内存溢出。
内存泄漏就是你在这个函数中引用了某一项内容,然后这个内容会占用了2M的空间,如果你不销毁他,那么在你下一次引用的时候,就还是会生成2M占用空间,长此以往,不管多大的内存运行到最后的内存都是不够了,这就叫做内存泄漏。
在上面这段代码中,就存在着C++中最经典的内存泄漏问题,我们会发现,在foo方法调用结束后,x,y都会被机器自动释放,但是指针p并不会被释放掉,他会像一座孤岛一样一直停留在那里,只有使用者知道p停留在哪里,可是这个时候的x,y已经被释放了,所以别人也用不了,就一直占用着这块内存,那么我们该如何让解决这个问题呢?
我们只需要销毁指针p,如下:
当然,我们也可以选择保留指针p,只需要将他赋值为空指针就好了,在下次使用它时,判断一下,它是否为空指针,就知道它是不是闲着的了。(用NULL,有时编译器会把它和int类型弄混)