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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM