2014-03-27 76 views
0

我在我的C++程序中有一個結構。在我的函數結束時,我執行delete []來釋放分配的內存。如何在不執行for()循環的情況下清除代碼中的所有元素?如何清除C++中的動態數組以及堆棧中有多少?

struct sServerStatus 
{ 
    TCHAR sServer[MAX_COMPUTERNAME_LENGTH+1]; // The NetBIOS name of the computer + 1 null terminating character. 
}; 
sServerStatus *sServersType1 = new sServerStatus[1024]; 

Q1。填充一些項目後,如何清除陣列?我是否使用SecureZeroMemory?第二季度銷售價格下降,銷售價格下降,第二季度銷售價格下降,第二季度銷售價格下降。什麼是堆棧?我假設在堆棧上分配的空間只是MAX_COMPUTERNAME_LENGTH + 1,1024個元素在堆上?

+1

我沒有使用SecureZeroMemory,但你可能想要做一些像'SecureZeroMemory(sServersType1,sizeof(sServerStatus)* 1024)'。 – codah

回答

3
  1. new sServerStatus[1024];將分配在堆上 1024個sServerStatus實例

  2. 其中每一個都有MAX_COMPUTERNAME_LENGTH+1TCHAR s。 (也堆,因爲這其中的對象被分配。)

堆棧上的唯一的事情是指針sServersType1

要清理所有內容,請注意,您沒有使用new來分配(2),因此您也不需要使用delete。一旦sServerStatus實例被破壞,該內存將被釋放。

但是,您將需要釋放您使用new分配的內存。做這個你需要寫delete[] sServersType1。請仔細注意[]

+0

我的意思是,如何清除代碼中的所有元素而不執行for()循環_before_我到達函數的末尾並運行delete []?由於函數中可能有5000行代碼,因此我需要在函數運行時經常清除數組。 – JeffR

+1

我認爲他正在談論'乾淨'的安全擦除。你沒有解決Q1問題 – codah