为什么在malloc中使用sizeof ?



在IDEONE上执行此代码时:

#include <stdio.h>
#include <stdlib.h>
struct A{
    int x;
    char c;
};
struct B{
    int y;
};
int main(void) {
    // your code goes here
    struct A* pa = malloc(sizeof(struct B));
    printf("%dn",sizeof(*pa));
    pa = malloc(sizeof(int));
    printf("%dn",sizeof(*pa));
    pa = malloc(sizeof(char));
    printf("%dn",sizeof(*pa));
    pa = malloc(0);
    printf("%dn",sizeof(*pa));
    return 0;
}
我:

8
8
8
8

我猜,因为pa是类型struct A *struct A是8字节长,然后malloc分配8字节,因为它应该,但如果是这样,为什么使用sizeof?

sizeof不返回分配的内存块的大小(C没有获得该信息的标准方法);它根据操作数的类型返回操作数的大小。因为指针的类型是struct A*, sizeof操作数的类型是struct A,所以sizeof总是返回8。

所以,即使你为一个10000字节的结构分配1个字节,你仍然会看到sizeof返回10000。

如果您没有为该对象分配足够的内存(例如,因为sizeof(int)

相关内容

  • 没有找到相关文章

最新更新