【发布时间】:2011-01-17 00:31:22
【问题描述】:
我有一个关于 C 中的 free() 的问题。
假设我有一个指向某个结构的指针(比如节点 *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指向的内存中的数据,所以我认为它最好释放它。现在,所有这些都嵌套在一个更大的(外)循环中。
非常感谢您的帮助
【问题讨论】:
-
为什么不根据您计划使用的代码发布您的问题?看起来你已经把你的代码过度简化到了这样的程度,它的合法性确实没有问题。
标签: c memory memory-management free