我们可以使用之前释放的指针吗?

时间:2010-02-15 14:47:02

标签: c memory memory-management free

我对C中的free()有疑问。

假设我有一个指向某个结构的指针(比如node * ptr)..释放后我可以将它初始化为NULL并使用malloc()或realloc()指向某个新位置吗?

例如:

node *ptr=NULL;
ptr=realloc(ptr,sizeof(node)); //works exactly like malloc

/* Do some operations on ptr */

free(ptr);

ptr=NULL;
ptr=realloc(ptr,sizeof(node));

这是有效的,还是会产生问题。 我使用realloc代替malloc的原因是因为我的所有realloc()调用都在一个循环中(所以在第二个参数中代替sizeof(node)它实际上是n * sizeof(node),其中n继续递增...并且这个结果数组中的最后一个位置用新数据写入)其中ptr指向的内存一直在增加,直到循环结束,此时我不需要ptr指向的内存中的数据,所以我认为它最好释放它。现在,所有这些都嵌套在一个更大的(外部)循环中。

非常感谢你的帮助

3 个答案:

答案 0 :(得分:9)

没关系 - 你真正重用指针而只是持有指针的变量。

答案 1 :(得分:7)

ptr不记得它曾被赋予一个值,如果它被赋值为NULL又重新使用它与第一次使用它没什么不同。

由于realloc()在传递NULL指针时就像malloc()一样,它应该可以正常工作。

答案 2 :(得分:3)

您不应该将其视为“释放指针”,而是释放指针指向的任何内容。指针首先指向一个对象(然后可以释放),然后指向另一个对象,这是完全正常的。