2013-10-18 74 views
0

我有一個C++代碼...轉換分配/重新分配從C++多維數組到C

// global 
DWORD* P; 
DWORD (*S)[256]; 

// then later allocate memory 
P = new DWORD[18]; 
S = new DWORD[4][256]; 

// later on, free memory 
delete P; 
delete [] S; 

,我要轉換爲C.我試過..

/* global */ 
DWORD* P; 
DWORD (*S)[256]; 

/* allocate */ 
P = malloc(sizeof(DWORD[18])); 
S = malloc(sizeof(DWORD[4][256])); 

/* free */ 
free(P); 
free(S); 

它的工作原理和我沒有從編譯器(GCC)得到任何錯誤或警告,但我不確定這是否正確,並且我猜測它泄漏了內存,可能是釋放了多維數組。

此外,那些數組太大而無法在堆棧上分配?我可以這樣做而不用忘記malloc/free嗎?

DWORD P[18] = {0}; 
DWORD S[4][256] = {{0}}; 
+2

'刪除P'是錯誤的,應該是'delete [] P''。 – interjay

+0

除了已經提到的錯誤'delete',我沒有看到你正在做什麼的問題,儘管我寧願寫'S = malloc(4 * sizeof(DWORD [256]));'。 – jxh

+0

@interjay謝謝。 @jxh所以'免費(S);'正確地釋放它? – user2896182

回答

1

該代碼是完全安全的。 malloc()free()只關心從堆中分配多個字節。這就是爲什麼在malloc()的調用中使用sizeof()來確定數據類型所需的字節數。例如,您也可以執行S = malloc(sizeof(DWORD) * 4 * 256)並獲得相同的結果。

要回答你的問題的後半部分,這些數組甚至都不太接近堆棧的大小。你可以堆疊分配C或C++。

+0

我現在明白了,非常感謝。 – user2896182