我需要爲需要用作2d數組的指針分配內存。我知道如何爲char指針和int指針分配內存我很困惑內存如何分配一個數組指針。原因的圖形表示會非常有幫助,下面的代碼也很好嗎?指針陣列的內存分配
char *names[5];
for(i=0;i<5;i++)
{
names[i]=(*char)malloc(sizeof(char));
}
我需要爲需要用作2d數組的指針分配內存。我知道如何爲char指針和int指針分配內存我很困惑內存如何分配一個數組指針。原因的圖形表示會非常有幫助,下面的代碼也很好嗎?指針陣列的內存分配
char *names[5];
for(i=0;i<5;i++)
{
names[i]=(*char)malloc(sizeof(char));
}
不,這不是因爲你分配陣列假設僅有1基本類型char的元件(這是1個字節)的尺寸。
我假設你想分配5個指針給names
內的字符串,但只是指針。
你應該根據指針乘以元素的數量的大小分配它:
char **names = malloc(sizeof(char*)*5);
你不需要一個一個循環來分配他們一個。請注意,您需要指定它是一個指針的指針採用**
Do not從'malloc()'強制返回值。 http://c-faq.com/malloc/mallocnocast.html – Tim 2010-10-24 15:48:42
此外,總之你可以做以下太在這種情況下爲五個字符
names = (char*)malloc(5 * sizeof(char))
分配存儲你正在做的是分配5個字符的空間。你可以寫這一點,它就會有同樣的結果:如果你想有一個指針數組
char *names = (char *)malloc(sizeof(char) * 5);
,我覺得this'd是最好的代碼
char **names = (char **)malloc(sizeof(char *) * 5);
我不是一個超級編碼器,但正如我現在所說的,這是正確的解決方案。
Emphisizing傑克在最後說到:他的代碼只有在數組被聲明爲指針指針時才起作用。
當作爲
char *names[5];
我想分配內存以正確的方式幾乎是一樣Ak1to做了數組聲明,但字符的字符串的通緝大小乘:
char *names[5];
for(i=0;i<5;i++)
{
names[i]=(char *)malloc(sizeof(char)*80);
}
否則編譯器會拋出一個關於不兼容類型的錯誤。
目前尚不清楚你的問題是什麼。你的代碼已經有效; 'names []'的每個元素指向堆上分配的'char'。你真的需要做什麼? – 2010-10-24 15:47:32
正確之後,請參閱有關如何釋放內存的以下問題:http://stackoverflow.com/questions/1733881/c-correctly-freeing-memory-of-a-multi-dimensional-array – Tim 2010-10-24 15:49:48