3

我有一个关于 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() 调用都在一个循环中(所以在第二个参数中它实际上是 n*sizeof(node) 而不是 sizeof(node) ,其中 n 不断增加......并且这个结果数组中的最后一个位置是用新数据写入的)ptr指向的内存不断增加直到循环结束,此时我不需要ptr指向的内存中的数据,所以我认为它最好释放它。现在,所有这些都嵌套在一个更大的(外部)循环中。

非常感谢你的帮助

4

3 回答 3

9

没关系 - 您并没有真正重用指针,而只是重用了持有指针的变量。

于 2010-02-15T14:49:54.123 回答
7

ptr不记得它曾经被分配过一个值,如果它被分配了 NULL 再次使用它与第一次使用它没有什么不同。

而且由于它的realloc()行为就像malloc()它传递了一个 NULL 指针一样,它应该可以正常工作。

于 2010-02-15T14:49:26.107 回答
4

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

于 2010-02-15T14:52:08.243 回答