我想將內存分配給結構中的數組。爲結構中的數組分配內存
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)
仍然是相同的。
我錯過了什麼嗎?
我想將內存分配給結構中的數組。爲結構中的數組分配內存
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)
仍然是相同的。
我錯過了什麼嗎?
s->num
是一個指向整數的指針,所以它的大小永遠不會改變。您將不得不跟蹤以其他方式從s->num
開始分配的內存塊。
sizeof(s->num)
給你的指針的大小int*
這將不會改變你的malloc
後。更確切地說,sizeof
是not a function but an operator,值由編譯器給出。它不是一個返回分配爲malloc
的數組大小的函數。
它是因爲s->num
不是一個動態創建的數組,而是一個指針。因此它給你指針sizeof
。
要了解動態分配的數組的大小,以前SO answer看出端倪下面,
ptr + 1
作爲指向數組的指針。*(ptr - 1)
獲取大小,這是隱藏的第一個int。
請勿施放malloc。 –
你可能是指'str * s'而不是'str s'。請考慮編輯你的問題。 –