2013-06-06 95 views
0

分配函數中數組VS如果我聲明我複製陣列上成被返回到主刪除在主

T* a_ray = new T[(10*17)]; 
for(int i=0;i<rows;i++) 
{ 
    for(int j=0;j<cols;j++) 
    { 
     a_ray[i*cols+j] = arry[i*cols+j]; 
    } 
} 

一個新的函數內內主要

char *ch2=new char[10*17]; 
char *ch2p=ch2; 
while(infile.get(*ch2)) 
{ 
cout<<*ch2; 
ch2++; 
} 
................................. 
char *zc=rc.sortArray(ch2p,10,17); 

一個分配的指針現在,我的問題是,我加入到這個功能,

delete [] arry; // delete old array 

這樣我就可以刪除的磁盤陣列在主要創建複製過來成獲取主返回ZC 看看上面代碼的新的後,但如果我運行在主顯示陣列的內容的循環,它顯示的全部內容,就好像在功能上刪除沒有工作,但是當我在主沒有刪除在循環顯示出來,所以我認爲它被刪除 所以,

1)我的第一個問題是,爲什麼在功能刪除不工作?

2)的行。

char *ch2p=ch2; 

這是一個指向另一個指針的指針嗎?這是否需要刪除或我只是刪除ch2?

感謝您的任何回覆,還請注意,此代碼是我的班級片段,現在已經結束,因此我無法獲得答案。

回答

2

無處不在你創建一個新的數組,你必須調用delete。如果您將數組複製到一個函數中,並且您將在此之後使用它,請考慮到您必須同時訪問這兩個數組。這是必要的,因爲在第一個數組的分開之後,您需要知道複製數據的起始單元格。此外,指針:

char * ch2p = ch2;

只是指向您的情況下相同的內存ch2陣列的第一個單元格。請注意,如果您將此指針ch2p作爲參數傳遞並要更改或刪除它,則必須將其作爲雙指針傳遞。

+0

感謝您的意見:)它是有道理的 –

0

你並不需要調用刪除CH2P。它只是一個指針,並指向在ch2上調用new時創建的分配內存。

在調用delete之後能夠訪問數組......這是正常的。你仍然擁有內存的地址,並且所有的刪除操作都可以將內存釋放到堆中。如果沒有任何東西來宣稱它,內容將保持不變。

+0

所以運行刪除裏面的功能是確定的呢? –

+0

是的,沒關係。我的理解是,你正在使用未排序的數組,然後分配一個新的數組來保存已排序的數組,這很好。 –