gpt4 book ai didi

c - 重新分配指针后分配的内存

转载 作者:太空宇宙 更新时间:2023-11-04 01:53:26 25 4
gpt4 key购买 nike

我有两个建议:

1.

double *a, *b;
a = (double *) malloc (N*sizeof (double));
b = (double *) malloc (N*sizeof (double));

这指向我使用 malloc 分配的巨大内存空间。并赋值。

如果我这样做了,

a=b;

a 指向 b 指向的数组。

分配给 a 的内存会怎样?正在遵循更好的选择:

free(a);
a=b;
free(b);

或仅

a=b;
free(b);

或a=b; 免费(一);

还是违法的?

  1. 如果 a 是全局的而 b 是本地的,有什么不同吗?

最佳答案

  1. 在您的示例中,a=b 造成了内存泄漏a 之前指向的内存块变得无法释放,因为您的程序不再有指向它的指针。这可能不会立即导致问题,但随着时间的推移,您的程序会耗尽内存,并且 malloc 开始返回 NULL

  2. 在重新分配之前调用 free(a) 可以解决这个问题。一旦你分配了a=b,你需要在调用free(b)之后小心使用a,因为a code> 变成了一个悬挂指针

Is it different if a is global and b is local?

指针的范围在这里并不重要。必须独立于指针指向的内存块来考虑指针。该 block 分配在动态内存中;指向 block 的指针可以在任何地方 - 静态、自动或动态。

关于c - 重新分配指针后分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38931817/

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