结构指针在sizeof()方法中没有提供正确的大小

时间:2011-10-25 08:21:04

标签: objective-c struct malloc

在使用malloc或realloc分配内存后,我遇到了获取结构指针大小的问题。我通过在一个单独的计数器中跟踪内存来解决这个问题,但我想知道这是一个错误还是有办法正确查询结构指针的大小。

示例代码演示了无论我分配给struct指针多少内存,当使用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

4 个答案:

答案 0 :(得分:3)

4是正确的答案,因为“models”是一个指针,而指针是4个字节。您将无法以这种方式找到数组的长度。你没有使用NSArray的原因吗?

答案 1 :(得分:1)

4是正确的答案。 指针指向可能包含任何内容的内存位置。当您查询指针的大小时,它会给出保存指针的内存位置的大小,在您的情况下为4。

例如

int *a = pointing to some large number;

int *b = pointing to a single digit number;

在上述情况下,a和b都具有相同的大小,无论它们指向何处。

有关详细信息,请查看此帖size of a pointer

答案 2 :(得分:1)

如果我理解正确,你想要达到分配缓冲区的大小。

sizeof如果在编译时评估错误的方法。缓冲区的大小是运行时概念。

您需要一种方法来查询C库,以返回指向缓冲区的指针的分配大小。

某些系统可以获取此类信息,例如Mac OS上的malloc_size

答案 3 :(得分:0)

sizeof(myvar)将返回指针的大小。在32位环境中,它等于4(字节)。 为什么不使用sizeof (Model)