如何检查内存分配是否仍然有效
How to check whether a memory allocation is still valid?
我的c++程序中有一些共享指针。在我为指针分配内存(使用new)后,我会在程序中做一些事情,然后我需要知道其他模块是否删除了这些指针。因为如果一个指针被删除了,那么我会得到一个访问冲突读取错误。有什么功能或方法可以检查一下吗?
我想,当你说"共享指针"时,你指的不是像std::shared_ptr
或boost:shared_ptr
这样的实际智能指针类,而是从一个函数传递到另一个函数的原始指针。
没有可靠、安全和跨平台的方法来确定原始指针的有效性。
然而,使用智能指针类将减轻管理动态内存的大部分负担。与其传递原始指针,不如传递智能指针。这些智能指针(至少是shared_
变体)被引用计数。只要指针的至少一个引用仍然存在,被指向的对象就不会是delete
d。一旦最后一个引用被删除,对象就会自动成为delete
d。
上述smart_ptr
I参考对受控对象具有所谓的"强参考"。还有智能指针,它保持对受控对象的弱引用。这些弱指针不会阻止对象被删除,并且可以在使用受控对象之前检查其有效性。
查看文档以了解更多信息。
相关文章:
- 我在二维向量中是否正确分配了内存
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 在函数范围内在堆栈上分配的数组在离开函数时是否总是被释放?
- 是否可以使用其他变量为变量分配值,而无需在 C++ 中更改其值?
- 堆分配的对象是否存在永不为空的唯一所有者?
- 新分配指向函数的指针是否合法?
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 是否可以使用分配器对象来释放另一个分配器分配的内存?
- 释放动态分配的内存时是否需要执行此额外步骤
- std::initializer_list 堆是否分配内存?
- 迭代器是否分配内存(如指针)?
- C 检查值是否分配给了类的成员
- 内存管理 - 添加小部件是否分配父级
- 一般来说,如何找出客户端是否分配了静态Ip或是dhcp客户端
- 未使用的 STL 容器是否分配内存
- 移动是否分配了 std::fstream 关闭原始流
- 我如何知道是否分配了内存插槽
- 要声明指针变量,内存是否分配给指针的名称或指针的地址?
- 宏是否分配内存?
- 是否有一种方法来判断是否分配了内存缓冲区并且必须删除