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

ass*_*sin 3 c memory free memory-management

我对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));
Run Code Online (Sandbox Code Playgroud)

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

非常感谢你的帮助

jld*_*ont 9

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


Joa*_*uer 7

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

因为realloc()行为就像malloc()它传递一个NULL指针一样,它应该可以正常工作.