【问题标题】:Memory Allocation and Deallocation in CC中的内存分配和释放
【发布时间】:2015-11-04 05:35:07
【问题描述】:

我正在为某个特定大小的 void * 分配内存。分配后,我想显示内存泄漏,并希望释放该内存,但给定的特定大小。

例如:我已经使用 malloc 分配了 1000 字节的内存,现在我想释放这 1000 字节中的 500 字节。

我该怎么做?

谢谢你和问候

【问题讨论】:

  • 这根本不可能,你不能只释放你分配的一半内存块。要么全有,要么全无。为了模拟内存泄漏,为什么不干脆不释放内存呢?
  • 你能做的最好的就是分配一块新的内存,然后释放旧的。
  • Not an exact dupe,但可以提供一些见解。

标签: c


【解决方案1】:

没有办法free 只是分配了一些内存。但是有realloc 的选项是尝试调整 ptr 指向的内存块的大小,该内存块之前是通过调用 malloc 或 calloc 分配的。

void func()
{
        //allocate 1000 byte
    void *ptr = malloc(1000);

        //reallocate with new size 
    ptr = realloc(ptr ,500);
        //Now you have memory of 500 byte


      //free memory after use
    return;
}

【讨论】:

    【解决方案2】:

    没有办法只释放分配的 1000 个字节中的 500 个字节。

    free() 函数仅使用由 malloc() 及其系列函数返回的指针进行分配。所以它会释放所有分配的内存。

    如果您的目的是显示内存泄漏,那么

    void func()
    {
      void *p =  malloc(1000);
      // Some stuff
      return;
    }
    

    这里分配的内存没有释放,你有内存泄漏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      • 2013-02-28
      • 2016-02-19
      • 1970-01-01
      相关资源
      最近更新 更多