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[]。

  • 相关阅读:
    Android笔记之spinner的使用
    Android笔记之AlertDialog使用
    Android笔记之intent使用(一)
    Android笔记之Editext使用
    Android控件之Textiew的使用
    Fastboot常用命令集,完美取代Recovery的所有功能
    Android笔记之WebView
    Android程序下重启手机
    Android笔记之ListView组件的使用
    intellij idea设置(字体大小、背景)
  • 原文地址:https://www.cnblogs.com/craft0625/p/7535062.html
Copyright © 2011-2022 走看看