fre*_*low 6 c++ debugging pointers memory-management visual-studio-2008
一些程序员喜欢在释放指针后将指针变量设置为null:
delete ptr;
ptr = 0;
Run Code Online (Sandbox Code Playgroud)
如果有人试图再次释放指针,那么什么都不会发生.在我看来,这是错误的.在指针被释放后访问指针是一个错误,错误应尽快跳到你的脸上.
是否有一个替代值可以指定给指定已发布的指针的指针变量?
delete ptr;
ptr = SOME_MAGIC_VALUE;
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望Visual Studio 2008 在调试模式下告诉我" 程序已被终止,因为您试图在此处访问已发布的指针! ".
好吧,似乎我必须自己做检查.以下模板有什么问题吗?
template <typename T>
void sole_delete(T*& p)
{
if (p)
{
delete p;
p = 0;
}
else
{
std::cerr << "pointee has already been released!\n";
abort();
}
}
Run Code Online (Sandbox Code Playgroud)
delete没有.如果你真的想要警告或错误的话,在尝试某事时测试"0" .
或者,在开发过程中,您可以省略ptr = 0;并依靠valgrind告诉您何时何地尝试双重免费.一定要放ptr = 0;回去发布.
编辑是的,我认识的人 C++不需要测试delete 0;
我不是在暗示if (ptr != 0) delete ptr;.我在暗示if (ptr == 0) { some user error that the OP asked for } delete ptr;
NULL释放指针后分配.而且在使用它之前,检查其NULL两者均..如果它为空,报告错误自己.
| 归档时间: |
|
| 查看次数: |
303 次 |
| 最近记录: |