【问题标题】:Malloc allocating same address in memory?Malloc在内存中分配相同的地址?
【发布时间】:2014-11-27 02:33:21
【问题描述】:

我发现了与我类似的问题,但我仍然无法弄清楚为什么我的代码会以这种方式运行。

我有一个名为“矩形”的结构,这是我要运行的代码:

Rectangle *newRect = (Rectangle *)malloc(sizeof(Rectangle));
Rectangle *newRect2 = (Rectangle *)malloc(sizeof(Rectangle));
printf("rect1: %p rect2: %p",newRect,newRect2);

它为他们两个输出相同的地址,我做错了什么?

谢谢!

【问题讨论】:

  • 你不需要演员表
  • 您要么 a) 没有运行您发布的确切代码,要么 b) 在第二次调用 malloc 之前释放 newRect
  • 请向我们展示表现出这种行为的 SSCCE:sscce.org
  • @o11c - 你在 C++ 中使用 new 而不是 malloc。 C 不需要演员表,也不是好的做法
  • @o11c 不,这不是一个好习惯。 C++ 中的 C 类型转换也不是好的做法。

标签: c malloc


【解决方案1】:

您可能没有在编译时打开所有警告,并且忘记包含stdlib.h。然后malloc 被一些编译器解释为返回int 而不是void*。在 64 位架构上,这会丢失重要信息,因此最终您会在打印中看到相同的值。

不要返回malloc

【讨论】:

  • 我已经加入了 stdlib.h。我也删除了演员表,同样的事情正在发生
  • @Cicada,不,它不是由标准规定的,它是。在没有看到定义的情况下使用函数在现代 C 中是违反约束的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-23
  • 1970-01-01
  • 2018-08-03
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 2023-04-01
相关资源
最近更新 更多