2013-11-14 81 views
1

我想將內存分配給結構中的數組。爲結構中的數組分配內存

struct str 
{ 
    int *num; 

}; 

creat() 
{ 
    str s = malloc(sizeof(str)); 
    s->num = (int*)malloc(5*sizeof(int)); 
} 

但線s->num = (int*)malloc(5*sizeof(int));執行後,如果我檢查,sizeof(s->num)仍然是相同的。

我錯過了什麼嗎?

+0

請勿施放malloc。 –

+0

你可能是指'str * s'而不是'str s'。請考慮編輯你的問題。 –

回答

1

s->num是一個指向整數的指針,所以它的大小永遠不會改變。您將不得不跟蹤以其他方式從s->num開始分配的內存塊。

1

sizeof(s->num)給你的指針的大小int*這將不會改變你的malloc後。更確切地說,sizeofnot a function but an operator,值由編譯器給出。它不是一個返回分配爲malloc的數組大小的函數。

0

它是因爲s->num不是一個動態創建的數組,而是一個指針。因此它給你指針sizeof

要了解動態分配的數組的大小,以前SO answer看出端倪下面,

  1. 正如你想分配5個整數數組,再添加1個整數它,讓它6 。
  2. 在第一個整數中隱藏大小,並返回ptr + 1作爲指向數組的指針。
  3. 現在您可以在*(ptr - 1)獲取大小,這是隱藏的第一個int。