2011-10-25 59 views
0

我在使用malloc或realloc分配內存後得到結構指針大小的問題。我已經通過在單獨的計數器中跟蹤內存來解決這個問題,但是我想知道這是否是一個錯誤,或者是否有方法來正確查詢結構指針的大小。在sizeof()方法中沒有提供正確大小的結構指針

示例代碼演示了無論我分配給結構指針的內存有多少,在使用sizeof()方法查詢時總是返回4。

typedef struct { 
    int modelID; 
    int bufferPosition; 
    int bufferSize; 
} Model; 

Model *models = malloc(10000 * sizeof(Model)); 

NSLog(@"sizeof(models) = %lu", sizeof(models)); //this prints: sizeof(models) = 4 
+0

請標記這個Objective C而不是C. – Lundin

回答

1

如果我理解正確的話,你想在分配的緩衝區的大小。

sizeof如果由於在編譯時評估而出現錯誤的方法。緩衝區的大小是一個運行時概念。

您需要一種方法來查詢C庫以返回指向緩衝區的指針的分配大小。

某些系統有辦法獲得這種信息,例如在Mac OS上的malloc_size

+0

這正是我所期待的。爲了讓它在iOS上工作,我必須導入malloc/malloc.h,之後它似乎現在都在工作。謝謝。 – robhasacamera

3

4是正確答案,因爲「models」是一個指針,指針是4個字節。您將無法以這種方式查找數組的長度。任何你不使用NSArray的理由?

0

sizeof(myvar)將返回指針的大小。在32位環境中,它等於4(字節)。 爲什麼不用sizeof (Model)來代替?

1

4是正確的答案。 指針指向可能包含任何內容的內存位置。當你查詢指針的大小,它賦予持有的指針,而你的情況是4

例如

int *a = pointing to some large number; 

int *b = pointing to a single digit number; 

在上述情況下的存儲位置的大小,既和b具有相同的大小,而不管它們指向何處。

欲瞭解更多信息,看看這個帖子size of a pointer