zoukankan      html  css  js  c++  java
  • C++数组释放问题

    今天做2级题时遇见一个小问题:

    当时代码我的修改如下:

     1 // proj1.cpp
     2 #include <iostream>
     3 using namespace std;
     4 
     5 class MyClass {
     6 public:
     7    MyClass(int len) 
     8    { 
     9       array = new int[len];
    10       arraySize = len;
    11       for(int i = 0; i < arraySize; i++)
    12          array[i] = i+1;
    13    }
    14 
    15    ~MyClass()
    16    {
    17 // ERROR   **********found**********
    18        delete array;
    19    }
    20 
    21    void Print() const
    22    {
    23       for(int i = 0; i < arraySize; i++)
    24 // ERROR   **********found**********
    25          cout << array[i] << ' ';
    26 
    27        cout << endl;
    28     }
    29 private:
    30    int *array;
    31    int arraySize;
    32 };
    33 int main()
    34 {
    35 // ERROR   **********found**********
    36    MyClass obj(10);
    37 
    38    obj.Print();
    39    return 0;
    40 }

    运行成功以后没问题,可是第18行给我判错。

    一直以来关于数组的问题,我一直以为 array[]和array没啥区别,但是查了相关资料:

    • array代表这个数字,它相当于一个指针,指向第一个元素(&a[0]),即指向数组的首地址,数组中的其他元素可以通过array的位移得到,此时的进阶是以数组中单个的元素类型为单位的
    • array[]代表的不是取array[]这个变量的地址,而是取数组元素的地址。虽然array[]和array得内存地址相同,但它们的意义不相同,它是代表整个数组的,它的进阶单位是整个数组的字节长度

     而且关于Delete和Delete[]我的理解也存在误区:

    http://blog.csdn.net/shandaliuyan/article/details/5930719

    总结最后的使用原则就是:new 和 delete、new[] 和 delete[] 对应使用,数组选择使用delete[]。

  • 相关阅读:
    struts2.1.6存在中文乱码的bug
    记Spring下autowire为name时的一个现象
    AOP注解不起作用的debug结果
    占位
    占位
    Hibernate学习小结
    Struts2学习笔记
    金尚网上商城项目第一章小结
    JavaWeb 学习的第一阶段总结
    大话设计模式 笔记——策略模式
  • 原文地址:https://www.cnblogs.com/craft0625/p/7535062.html
Copyright © 2011-2022 走看看