繁体   English   中英

结构指针的malloc为什么起作用?

[英]malloc of pointer to structure works why?

在我不小心使用的代码中

    list* Head = malloc(sizeof(list*));

而不是正确的

    list* Head = malloc(sizeof(list));

创建一个新的list类型节点,但稍后效果很好。

所以我的问题是为什么它能正常工作?

这里的想法是, malloc()没有想法(类型/大小)或与将要分配返回值的变量的关系。 它使用输入参数,分配请求大小的内存,然后返回指向内存块的指针。 因此,以防万一,您请求了错误大小的内存块, malloc()并没有阻止您这样做的能力。 使用返回的指针后,您要么

  • 当分配的大小超过目标类型所需的大小时,浪费内存。
  • 当请求的大小小于目标类型所需的大小时,通过访问绑定内存导致未定义的行为

现在,无论哪种情况,您都可以看到它正常工作 前者在某种程度上是允许的(尽管应该避免),但后者是严格的禁止使用。


忠告词:

为避免这些类型的错误,请使用以下格式

  type * variable = malloc(sizeof *variable);

在这种情况下,您有两个优点,

  1. 您的语句与变量的类型分离。
  2. 弄乱所需大小的机会更少。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM