2015-01-12 31 views
-1

下面的代碼提供了一個帶有64個塊的2d char數組。爲C++中的char數組分配固定內存

char **arr= new char*[64]; 
for (int i = 0; i < 64; i++) { 
    arr[i] = new char[64]; 
} 

但是我想有過這陣,就像我可以malloc的固定內存C.

char **arr= malloc(sizeof(char *) * 64); 
for (int i = 0; i < 64; i++) { 
    arr[i] = malloc(64); 
} 

我怎樣才能實現在C++控制?

此外,在C,我們可以用指針這樣的:

Mystruct *next_entry = (Mystruct *) ((char*) slot + SIZE; 

我們可以計算出指針的地址,並得到下一個可用的空閒內存。

如果我想用C++做同樣的事情,我需要做什麼?

+4

您的第一個'malloc',無論如何都是錯誤的。因爲它應該是'sizeof(char *)',可能它是一個錯字。 –

+3

'我如何在C++中實現它?'除非我在這裏誤讀了一些東西,否則您已經實現了它。 – Cornstalks

+0

'sizeof(char)'並不是真的有意義,因爲它被定義爲1. –

回答

3

你不需要任何額外的東西做在C相同的操作++,和你的new代碼相當於你malloc代碼

char **arr = malloc(sizeof(char) * 64); equiv char **arr = new char*[64]; 
     arr[i] = malloc(64);    equiv   arr[i] = new char[64]; 

也許除了可能的錯字這一行

char **arr = malloc(sizeof(char) * 64); 

應閱讀

char **arr= malloc(sizeof(char *) * 64); 

也這將工作,就像它在c中一樣工作雖然在c中,我認爲這違反了嚴格的別名規則,但我不太確定。

+0

所以,即使在我的C++代碼中,我仍然可以用arr [Y] [X]訪問Y字節的X字節?而且C++還支持我在C中編寫的指針操作?大聲笑......學到了一些東西...... – user3000888

+0

在C++中,你需要投射malloc,並且還將remmeber轉換爲'free'而不是'delete'。 –

+0

@MattMcNabb目的是使用'new',和'delete'而不是'malloc'。 –