本节书摘来自异步社区出版社《从缺陷中学习c/c++》一书中的第6章,第6.8节,作者: 刘新浙 , 刘玲 , 王超 , 李敬娜 , ,更多章节内容可以访问云栖社区“异步社区”公众号查看。
从缺陷中学习c/c++
代码示例
现象&结果
程序运行时出现coredump。
bug分析
上述代码中,在函数function_a中实例化了myclass对象指针a,然后调用函数function_b,在function_b中,对指针a操作之后,执行delete操作,将a所指对象释放掉。随后,function_a调用函数function_c,在function_c中又再次操作指针a。
此时,指针a为空,因此,当调用a→getvalue时发生coredump。这里存在的一个问题是编码风格不好,对象的分配使用释放混乱。
一个函数分配,一个函数释放,一个函数再次使用。导致function_c不知道前面a已经被释放。避免这种问题的一个办法是:编码时遵循“谁分配,谁释放”的原则。即对象在哪里分配,就在哪里释放。
正确代码
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。