如何检查指针指向的内存是否已成功解除分配?
答案 0 :(得分:12)
用几句话说:你做不到。
查看Valgrind之类的工具,以帮助您调试内存泄漏问题。
你应该考虑的其他一些事情:
delete
无效,vector
,...)而不是滚动自己的答案 1 :(得分:5)
抱歉,非常简短的回答“你不能”
答案 2 :(得分:2)
使用IBM rational purify工具检查内存的正确释放。
答案 3 :(得分:2)
定义成功!定义解除分配!
取消分配内存(无论是空闲还是删除)后,不得再次使用该指针。所有其他假设都无关紧要。
毕竟,您调用C / C ++运行时来释放内存,但C / C ++运行时也调用操作系统的函数来释放页面。您甚至可以在C / C ++运行时之上安装自定义内存分配器,例如:使用缓存来实现更快的内存分配算法。
所有这些层都可以为自己保留释放的内存(因为碎片或仅仅因为它们喜欢将它保留给自己)或者可能告诉底层将其解除分配。任何事情都可能发生,只是不要再使用那个指针了。
答案 4 :(得分:1)
答案 5 :(得分:1)
异常处理。即尝试/捕获块。
答案 6 :(得分:0)
在C ++中,您可以放心地假设释放永远不会失败。析构函数不能抛出异常,保留的实际内存永远不会被释放,所以考虑到这两点,什么都不会出错。
但是,如果删除已删除的指针,程序可能会崩溃。这不是解除分配本身的问题 - 原始delete
成功运行。如果程序的内存管理尝试删除两次指针,那么这是一个问题,但现代STL和std::vector
,std::unique_ptr
等智能指针很少需要...