[英]Free memory in C : how to check for valid pointer?
我有这个程序,它通过指向内存区域(结构,数组)的指针在内存中存储很多东西,并且该用户可以随时启动该程序。 初始化时,程序需要释放以前使用的内存(如果有的话,这就是问题),并分配可能不同大小的新存储。
现在,在第一次初始化时,我不知道指针指向的是什么:特别是,我不知道它们是否是垃圾。 但是,如果没有,我需要释放他们的指点。 我怎么知道?
除了指向NULL
的指针不指向任何东西外,无法检查给定的指针是否指向有效的东西。 跟踪仍然指向动态内存的指针是您的工作。 (指针可以指向自动和static
变量,当然,您不得尝试free
它。)
一旦他们free
了相关的内存并依靠C标准将free(NULL)
定义为无操作这一事实,大量的人便将指针设置为NULL
。 因此,您可以采用这种方法。
但是过分依赖此类代码可能会让人感到恶臭,因为它可能掩盖潜在的错误。 只是要更加注意内存管理。
或者您可以自己构建以下其中之一: https : //en.wikipedia.org/wiki/Boehm_garbage_collector
我们在这里谈论全球吗? 因为它们会自动初始化为零。 通常,您的程序应该以某种方式编写,即指针永远不要指向垃圾,而指向有效数据或具有NULL值( free(NULl)
是无操作)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.