zoukankan      html  css  js  c++  java
  • New动态分配 Delete 释放内存

    在C++中,对于变量和对象都是编译器在编译时分配好的,对于数组初始化时,无法确定多少内存,很容意造成大开小用的情况。

    new  动态分配

    一般格式:1. 指针变量名 =new  类型标识符;

                  2.指针变量名  =new  类型标识符(初始值);

                  3.指针变量名  =new  类型标识符 [内存单元个数];   开辟数组的定义方法

    new运算符返回的是一个指向所分配类型变量的指针。

    delete 释放内存

    一般格式:1.delete p;

                  2.delete []p;

    删除变量p的地址空间,释放int内存。 --堆区(优先队列)  delete p实际意思是删除p所指向的目标地址,释放它所占的内存,而非删除p指针。

    对于delete 有两大问题: 1.内存泄露  2.重复释放 

    int* p=new int;

    delete p;

    p=NULL;   //上完厕所洗手的好习惯

    析构函数

    对于线性表的析构函数 

    1.  int* p;

    while(fisrt!=NULL){

        p=first;

        first=first->next;

        delete p;

    }

    错误解析:

      int* p=first;

    while (p!=NULL){

      delete p;

      p=p->next;

    }

    已经释放了p所指向的first地址,p->next 到底指向什么了?错误!!!

    int a=5;

    int* p=a;

    cout<<*p<<endl;   p 所指向的地址内容

    cout<<&p<<endl;  p本身的地址

    cout<<p<<endl;    p所指向的地址 == &a

  • 相关阅读:
    MvvmTest
    win8 app 相关的几个网站
    autp
    分析WPF代码工具
    mdsn
    线程和委托
    C#guanli
    学习Boost小结(一)
    Boost.test库的配置
    自己真是太没正事了.
  • 原文地址:https://www.cnblogs.com/jllj/p/6131120.html
Copyright © 2011-2022 走看看