none
struct + typedef + malloc + sizeof RRS feed

  • 问题

  • 问题:
    typedef struct listElement{
    Data data;
    struct listElement * next;
    } *linkList;
    分配空间 l = (linkList)malloc(sizeof listElement); 但是我用 l = (linkList)malloc(sizeof linkList); 也能分配成功,而且能正常使用。sizeof listElement = 16, sizeof linkList = 4,不知道为什么后面那个也行,给一个16字节的结构体分配4字节的空间,能这样吗?但分配成功,而且后面用起来也都一样的,很奇怪,为什么呢?
    2010年11月10日 2:42

答案

  • 指针和对象是不一样的

    你给一个指针分配4个字节的空间

    然后把他强制转换成一个16字节的类型

    这样它可以正常使用没错

    不过只有前4个字节能保证没有问题

    后12个字节的行为是未知的

    • 已标记为答案 Daneill 2010年11月10日 5:35
    2010年11月10日 4:53

全部回复

  • 这样做不安全。malloc返回一个void*的指针。你是把他强转成linkList的
    麻烦把正确答案设为解答。
    2010年11月10日 4:28
    版主
  • 指针和对象是不一样的

    你给一个指针分配4个字节的空间

    然后把他强制转换成一个16字节的类型

    这样它可以正常使用没错

    不过只有前4个字节能保证没有问题

    后12个字节的行为是未知的

    • 已标记为答案 Daneill 2010年11月10日 5:35
    2010年11月10日 4:53
  • 赞!谢谢 SplendourG和向立天 两位大牛!
    2010年11月10日 5:05
  • malloc中的sizeof必需是对象实例,而不是对象指针。这里的对象,不仅仅是包括oo里面的对象,包括int double变量,等等。建议不要用malloc了,用new吧。记得delete
    bylh
    2010年11月11日 2:44