gpt4 book ai didi

c - 当我多次运行程序时如何使用或释放​​动态分配的内存?

转载 作者:行者123 更新时间:2023-11-30 18:23:52 24 4
gpt4 key购买 nike

如何释放动态分配的内存?

假设输入(假设由用户给出)为 1000,现在如果我分配 1000 的内存,在此之后(第二次)如果用户给出输入为 500,我可以重用已分配的内存吗?

如果用户现在输入值,例如 3000,我该如何处理?我可以重用已经分配的 1000 个内存块,然后创建另外 2000 个内存块吗?或者我应该创建所有 3000 个内存块?

其中哪一个是可取的?

#include <stdio.h>
#include <stdlib.h>
typedef struct a
{
int a;
int b;
}aa;

aa* ptr=NULL;
int main() {
//code
int input=2;
ptr=malloc(sizeof(aa)*input);

for(int i=0;i<input;i++)
{
ptr[i].a=10;
ptr[i].b=20;
}

for(int i=0;i<input;i++)
{
printf("%d %d\n",ptr[i].a,ptr[i].b);
}

return 0;
}

最佳答案

我相信,您需要阅读 the "lifetime"分配的内存。

对于分配器函数,如 malloc() 和系列,(引用自 C11,第 §7.22.3 章,“内存管理函数”)

[...] The lifetime of an allocated object extends from the allocation until the deallocation. [....]

因此,一旦分配,返回的内存指针将保持有效,直到被释放为止。有两种方法可以释放它

  • 在程序内调用 free()
  • 一旦程序终止。

因此,从分配点到程序终止或 free() 调用(以较早者为准),分配的内存都是可用的。

<小时/>

就目前情况而言,可能有两个方面,让我澄清一下。

  • 场景 1:

    You allocate memory (size M)
    You use the memory
    You want the allocated memory to be re-sized (expanded/ shrinked)
    You use some more
    You're done using

    这就是您期望的流程吗,您可以使用realloc()来调整分配的内存大小。完成后,使用 free()

  • 场景 2:

    You allocate memory (size M)
    You use the memory
    You're done using

    如果是这种情况,完成后,请使用 free()

注意:在这两种情况下,如果程序运行多次,则每次单独调用中发生的分配之间没有任何联系。他们是独立的。

关于c - 当我多次运行程序时如何使用或释放​​动态分配的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48820756/

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