3-22使用delete释放内存空间

  1. 我们使用new分配的内存空间,如果我们不使用delete释放,那么内存是不会自动释放的,这样就会造成内存空间的泄露。如果这样的情况比较多,那么会造成系统的内存空间逐渐枯竭,从而导致程序的崩溃。

  2. 举例:

    • 分配一个内存空间

      int *n = new int;
      *n = 123;
      
    • 释放

      delete n;   
      
  3. 注意

    • delete只能释放使用new分配的内存空间,不能释放malloc以及类似的函数分配的内存空间

    • 对于普通变量,例如 int xyz = 100;之类的,当程序结束后,它所占用的内存空间将由系统自动回收,这类变量储存在栈上;而由我们动态分配的内存空间储存在堆上,需要我们手动释放。

    • delete以后,指针本身和指针指向的内存空间的数据不会被清空,除非再次写入数据。

    • 释放内存后的指针所指向的内存空间我们仍然可以赋值,但是具有一定的危险性,因为这段空间随时可能被其他所占用,所以尽量不要这样用。

    • int *xyz = 500;
      *n = 456;//尽量不要这样用,原因如上
      *n = &xyz//这个是没有问题的,xyz储存在栈上,程序结束前将一直占用该内存空间
      
    • 有多个指针指向了相同的内存空间,只要释放一个,其他的也会释放。

    • 对于已经释放了的指针所指向的内存空间,不能再次释放。

发布了41 篇原创文章 · 获赞 14 · 访问量 1987

猜你喜欢

转载自blog.csdn.net/qq_43367829/article/details/105231132