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

标签 c memory memory-management free

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

非常感谢您的帮助

最佳答案

没关系 - 您不是真正重用指针,而只是重用保存指针的变量。

关于我们可以使用之前释放的指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2266642/

相关文章:

c - 如何使用 ANSI C 以毫秒为单位测量时间?

c - 我试图从 c 中的文件中读取一行并动态分配内存,但结果总是不好

Objective-C 重用 NSString 内存泄漏

c# - 弱引用优势

google-cloud-platform - 如何监控在 GCE 上运行的容器虚拟机的内存使用情况

计算文件中字符数、单词数和行数的C代码

c - OS X 上的 undefined symbol "_clone"

c - 使用总是只执行一次的 while 循环只是为了使用 break 语句是一种不好的形式吗?

c++ - C++ "new"内存分配失败谁来处理?

objective-c - 为什么[self.property release]会导致静态分析器显示 "incorrect decrement of the reference count"错误?