我怎么知道,已成功释放已分配的空间?

alw*_*lin 6 c memory

有谁知道,我们如何验证分配的空间是否成功释放?在手册页中,它表示"free()不返回任何值".

小智 12

有三种可能的情况:

free( NULL );     // does nothing, so always works
free( malloc(42) );  // does something, always works
free( 666 );      // undefined behaviour - returned value would be meaningless
Run Code Online (Sandbox Code Playgroud)

因此,测试没有任何free()意义.

  • +1很好的案例细分和漂亮的魔术数字:-) (3认同)
  • @alwin嗯,程序可能不会崩溃 - 这是未定义行为的奇迹 - 但基本上是,是的. (2认同)

R..*_*R.. 10

没有返回值,因为没有失败的情况.free永远成功.没有什么可以检查的.

请注意,这假设您正确使用它.如果传递给free作为参数无效的free指针,例如未初始化的指针,指向已释放对象的指针,或指向未获取的对象的指针malloc,则程序具有未定义的行为.这不是可报告的错误; 相反,它意味着什么事情都可能发生.