我有两个建议:
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; 免费(一);
还是违法的?
- 如果 a 是全局的而 b 是本地的,有什么不同吗?
最佳答案
在您的示例中,
a=b
造成了内存泄漏。a
之前指向的内存块变得无法释放,因为您的程序不再有指向它的指针。这可能不会立即导致问题,但随着时间的推移,您的程序会耗尽内存,并且malloc
开始返回NULL
。在重新分配之前调用
free(a)
可以解决这个问题。一旦你分配了a=b
,你需要在调用free(b)
之后小心使用a
,因为a
code> 变成了一个悬挂指针。
Is it different if
a
is global andb
is local?
指针的范围在这里并不重要。必须独立于指针指向的内存块来考虑指针。该 block 分配在动态内存中;指向 block 的指针可以在任何地方 - 静态、自动或动态。
关于c - 重新分配指针后分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38931817/