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

标签 c arrays pointers memory

我有两个建议:

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/

相关文章:

c - 如何更改传递给函数的结构的值

c - 混合写入 stdout 和调用 WriteConsole 是否总是以相同的顺序打印到控制台?

javascript - 使用 Javascript 或 JQuery 从对象列表中获取所有值

java - 数组是否有类似迭代器的函数(或解决方法)?

c - 如何测试指针数组的末尾?

c - 新变量指向旧变量

c - C中的这个连接函数有什么问题?

c - 如何在文件中保存大量 C 中的数字

javascript - 使用此代码在 JS 中查找字符串中最长的单词?

从C++中的指针数组复制一些字符串