gpt4 book ai didi

c - 结构体指针的 malloc 为何有效?

转载 作者:行者123 更新时间:2023-11-30 18:17:03 27 4
gpt4 key购买 nike

在我不小心使用的代码中

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

而不是正确的

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

创建一个新的list类型节点,但后来它工作得很好。

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

最佳答案

这里的想法是,malloc() 不知道(类型/大小)或与要分配返回值的变量的关系。它接受输入参数,分配请求大小的内存并返回指向内存块的指针,就是这样。因此,如果您请求了错误大小的内存块,malloc() 不会阻止您这样做。一旦您使用返回的指针,您将是

  • 当分配的大小超过目标类型所需的大小时,会浪费内存。
  • 原因undefined behavior当请求的大小小于目标类型所需的大小时,通过访问越界内存。

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

<小时/>

忠告:

为避免此类错误,请使用以下格式

  type * variable = malloc(sizeof *variable);

在这种情况下,你有两个优势,

  1. 您的语句与变量的类型分离。
  2. 错误输入所需尺寸的可能性较小。

关于c - 结构体指针的 malloc 为何有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46883222/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com