2016-06-22 35 views
0

我創建一個數組像數組做一些計算後如下如何刪除一維數組

int size = 5; 
double my_arr[m_size]; 

for (int i = 0; i < size; i++) 
{ 
    my_arr[i] = (rand()%10+1) + ((double) rand()/(RAND_MAX));; 
} 

我要刪除的磁盤陣列。所以我做這個

for (int i = 0; i < size; i++) 
    { 
     delete my_arr[i]; 
    } 

,我得到這個錯誤

error: type ‘double’ argument given to ‘delete’, expected pointer 

我搜索互聯網和所有的解決方案都涉及到指針數組。但我沒有使用任何指針。那麼我該如何刪除這個數組呢?

+2

你不知道。它在堆棧倒回並且變量超出範圍時自動刪除。 – tkausl

+1

提醒:'new'和'delete'是一對。當你使用'new'分配時,完成後使用'delete'。 –

+2

你不需要擔心刪除堆棧上的變量 –

回答

3

當離開已聲明變量的作用域時,該數組將自動刪除。 如果你真的需要釋放內存快,你可以嘗試把擁抱之間代碼:

{ //create new scope 
    int size = 5; 
    double my_arr[m_size]; 

    for (int i = 0; i < size; i++) 
    { 
     my_arr[i] = (rand()%10+1) + ((double) rand()/(RAND_MAX));; 
    } 

    //some stuff 

} //all non-pointer objects (or arrays) will be deleted 

或者你可以使用指針:

double *pMyarr = new double[m_size] ; 
0

首先,我想你應該考慮使用內存泄漏檢測程序在你的程序中,所以你可以自己知道你的代碼是否泄漏,如果你必須做些什麼。在你的代碼中,你會看到沒有必要刪除任何東西。 :)

據我所知,你應該只有兩種情況擔心內存:

  • 您已分配了一個C風格的數組malloccalloc。在這種情況下,您需要使用功能free來取消分配數組。但通常在C++中,你不需要這個。您更喜歡使用像std::arraystd::vector這樣的容器。
  • 你已經創建了一個類的新實例new,並且你有一個指向這個實例的指針。在這種情況下,當你不再需要這個實例時,你必須在指針上使用delete。但通常在C++ 11(或更高版本)中,你不需要這個。如果你確實必須使用指針,你更喜歡創建一個智能指針,如std::unique_ptrstd::shared_ptr,它將爲您處理內存。

當定義一個變量而不使用newmalloccalloc,(例如int a = 1 ;),這將是當它超出範圍自動刪除。所以你不必擔心。

這裏是一個變量超出作用域的一個簡單的例子:

int a = 1 ; 
{ 
    int b = 1 ; 

    // b is implictly deleted here, just before the bracket. 
} 
a++; // It works, because a exists in this scope 
b++; // It doesn't work, because b is out of scope. 

// a is implicitly deleted here, assuming we are at the end of a function 
+1

第二個項目符號點的額外準則是「但通常在C++中,你不需要這個。你更喜歡使用'std :: make_unique'和'std :: make_shared'(或'std :: array'和'std :: vector'就像前一項)「 – KABoissonneault

+0

@KABoissonneault;我不知道函數' make_unique'和'make_shared'(部分原因是我堅持使用C++ 11)但是你通過提到智能指針來說明問題,我將編輯我的答案,我只是想知道;'std :: make_unique (「 hello「)'與std :: unique_ptr (新字符串(」hello「))具有相同的用途,不是嗎? –

+1

@Lorèloi在某些情況下,對內存泄漏有更強的保護,請參見http: //stackoverflow.com/questions/22571202/differences-between-stdmake-unique-and-stdunique-ptr – tkausl