我对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指向的内存中的数据,所以我认为它最好释放它。现在,所有这些都嵌套在一个更大的(外部)循环中。
非常感谢你的帮助
答案 0 :(得分:9)
没关系 - 你不真正重用指针而只是持有指针的变量。
答案 1 :(得分:7)
ptr
不记得它曾被赋予一个值,如果它被赋值为NULL又重新使用它与第一次使用它没什么不同。
由于realloc()
在传递NULL指针时就像malloc()
一样,它应该可以正常工作。
答案 2 :(得分:3)
您不应该将其视为“释放指针”,而是释放指针指向的任何内容。指针首先指向一个对象(然后可以释放),然后指向另一个对象,这是完全正常的。