我正在编写一个C程序来计算粒子的路径(类似于三体问题)。在我的代码中,我有typedef'ed结构来表示粒子,以及一组向量来表示粒子的速度,加速度和位置。由于这是一个迭代解决方案,我必须重新计算所有这些(并因此malloc一个新的向量)数千次,并在每次迭代中将它们重新分配给父结构,如下所示:
while(collisionCheck(particle, mass0, mass1) == 0)
{
particle-> velocity = recalculateVelocity(particle);
}
我担心C将如何处理孤立的结构,我应该像这样释放旧的结构吗?
while(collisionCheck(particle, mass0, mass1) == 0)
{
free(particle-> velocity);
particle-> velocity = recalculateVelocity(particle);
}
或者C垃圾会收集孤儿并自动重复使用内存空间吗?
答案 0 :(得分:4)
嗯...... C 没有任何垃圾收集。
对于malloc
的每个记忆区域,您自己负责free
:
但是,一旦记忆已经free
d,它通常会被重复使用。
答案 1 :(得分:4)
如果它是一个指针,particle->velocity
实际上只创建一个新的结构(或其他)并返回指向它的指针,则只有空闲recalculateVelocity()
。
如果您未使用malloc()
,则不得使用free()
。如果您使用了malloc()
,则必须使用free()
。这里唯一的例外是realloc()
。
答案 2 :(得分:3)
C不是垃圾回收,所以它不垃圾收集任何东西。为了释放内存,在您使用free()
分配后,必须使用malloc()
功能。
所以答案是,如果particle->velocity
是您之前使用malloc()
分配的空间的唯一指针,则必须在分配给该指针之前释放free()
的内存,因为这意味着你不再有任何指向该空间的指针,那就是memory leak。