【问题标题】:uncommon use of malloc [closed]malloc 的不常见用法[关闭]
【发布时间】:2012-01-25 17:55:03
【问题描述】:

我遇到了这个(短)代码,我不确定它到底是做什么的;

int amount = 5
int totalAllocatedMemory = 0;
totalAllocatedMemory += amount, malloc(amount);

好像'malloc'在这里没有作用!

谢谢

【问题讨论】:

  • 肯定有效果——它会造成内存泄漏。
  • 不是一个真正的问题,没有建设性,过于本地化......如何决定?!
  • “totalAllocatedMemory”与“totalAllocatedMemroy”的名称不同,因此它可能不会像您认为的那样做。此外,您在第一行之后缺少一个分号。无论如何,它确实会泄漏内存。
  • 我见过嵌入式系统 malloc “实现”,它线性分配并且没有(有意义的)免费对应物,所以这里的 amount 可能正在将 malloc 线性分配器指针移动到对齐地址。我想不出为什么还能制作它。

标签: c++ memory malloc


【解决方案1】:

它确实有一个效果,因为它分配了内存。但是,代码确实看起来很奇怪,并且内存确实泄漏了。

如果您对语法和确切语义有疑问,请参阅How does the Comma Operator work

【讨论】:

  • 除了内存永远不会被使用,真是一段奇怪的代码
【解决方案2】:

它:

  • 分配 5 个字节
  • 5 添加到 totalAllocatedMemroy(错字?)
  • 泄露内存

【讨论】:

  • 吹毛求疵:逗号运算符的优先级低于 +=,因此它将 5 添加到 totalAllocatedMemory 而不是地址。
  • @BrankoDimitrijevic:同意。我什至不会认为这是一个挑剔的人。
【解决方案3】:

代码看起来有问题,但它的作用如下:

  • 将金额添加到totalAllocatedMemory
  • 分配 5 个字节并丢弃结果(这将是分配内存的地址,因此正如其他人所说的那样导致内存泄漏)

这是因为逗号在 C 中的所有运算符中的优先级最低。

【讨论】:

    猜你喜欢
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 2011-01-25
    • 2013-03-30
    • 2010-11-27
    • 2010-09-09
    • 1970-01-01
    相关资源
    最近更新 更多