【问题标题】:free with dynamically allocated memory使用动态分配的内存释放
【发布时间】:2014-10-07 05:41:39
【问题描述】:

我有这个 C 代码:

int main()
{
    int *p=(int *)malloc(100);   //100 bytes

    for(int i=0;i<10;i++)
    {
        p++;
    }

    free(p);

    return 0;
}

现在我的问题是 free(p) 释放所有 100 个字节还是只释放 90 个字节。 free() 怎么知道要释放多少字节?

【问题讨论】:

  • 你的代码没有任何意义。

标签: c pointers malloc free


【解决方案1】:

这是违法的。

free 的参数必须是由malloc 或其表亲返回的指针,或者是空指针。在您的示例中,p 已将其值更改为 p++

【讨论】:

  • 另外值得注意的是,mallocfree 的典型实现将分配的大小(可能与其他元信息一起)存储在指针的可见部分之前。但是还有其他实现,例如使用外部树。
猜你喜欢
  • 2011-03-17
  • 2013-11-22
  • 2013-04-14
  • 2017-06-13
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多