在程序执行时,我们临时定义的局部变量在栈上生成的内存会随着程序的结束释放,但是程序中使用calloc或new等创建在堆上的内存需要手动释放,否则会造成内存泄漏。但是指向堆上内存的指针手动释放之后,会随之变成野指针,需要定义到NULL上使指针不能被访问。
在此过程,有些疑问想不明白。
第一:如果不对堆上的数据进行手动释放,退出程序以后,这些数据会不会自动释放?如果不释放,下次运行函数时,指针会指向这些地址么?还是指针会重新创建新的地址?
第二:当指针所在函数结束之后,指针还会再存在么?如果不存在,所指向的堆上的数据会因此释放么?
第三:指针是一个变量,里面存放的是一个地址。如果通过malloc定义了一个数组后,再为同一个指针定义新的数组,他的地址会因此改变么,还是说只是将地址中的数据改变了?如果地址会因此改变,原来的地址数据会释放么?如果原来数据没有释放,是要在定义新地址之前手动释放么? |
|