(C++) list.error 方法和使用指针删除内存
(C++) list.error method and deleting memory using pointer
typedef struct value
{
char* contents;
int size;
}Value;
hash_map<Key,list<Value>,hash<Key>,eqKey> dspace;
list<Value> vallist;
.
每次创建Value
变量并添加到此列表时,我都在做什么。
我有一个指针Value * ptr
我使用此指针指向列表的成员,最后我从列表中擦除该成员。
现在我可以使用指针访问值,但不能使用列表迭代器。
我有两个问题
- 是否擦除从列表中删除元素,但分配的内存保持不变,或者内存也被释放。
- 是否可以使用此 ptr 释放内存,或者如果我将 ptr 设置为列表中的其他成员,那么前一个成员占用的内存将被释放或不释放。
-
该元素将不复存在。如果元素是指针,则指针将不复存在,但它指向的对象不受影响。然而,元素本身已经消失了。否则,列表将极难使用。
-
使用指针执行的操作对列表完全没有影响。如果您希望指针使对象保持活动状态,以便在并且仅当指向它的最后一个指针被销毁时销毁对象,则可以使用这些指针。(比如Boost的
shared_ptr
。
当您调用 dspace.erase()
从哈希映射中删除元素时,使用的内存将被释放。这意味着内存现在可以用于其他事情。这并不意味着该内存块中的数据被擦除。当您尝试通过指针访问数据时,内存可能看起来仍然完好无损,这可能就是您询问内存是否已释放的原因。但是,这样做将导致未定义的行为,因为指针指向的内存可能随时重复使用。
- 如果从列表中擦除
Value
实例,则会释放其分配的内存。 - 通常有人会调用
delete ptr;
但这在您的情况下不起作用,因为实例的内存已经释放。更改普通指针的值对内存分配完全没有影响。
您的Value
有一个char *contents
成员。如果删除Value
实例,它指向的内存可能会泄漏 - 具体取决于您分配它的方式。您应该考虑改用 std::string。
相关文章:
- 使用函数引用指向节点的指针删除链表中的节点?
- 如何通过指向元组的共享指针删除对象
- 函数内的 C++ 指针删除
- 一个对象的两个指针.删除了一个指针,对象仍然存在
- 如何通过存储在 std::list 中的指针删除对象?
- C++中的智能指针删除
- 将C 中的每个指针删除作为阵列的指针安全吗?
- 使用 C 字符串和指针.删除除小写和空格以外的任何字符
- 在特定情况下,指针删除和铸造之间的关系不清楚
- 提升属性树:使用指向节点及其父节点的指针删除节点
- 警告C4150在尝试包装本机C 类时,指向不完整类型的指针删除
- C++ Valgrind 双指针删除,用于防止内存泄漏
- C 通过指向其基类的指针删除派生对象
- 将指针删除到数组
- 当通过其中一个指针删除对象时,C++将所有指针设置为null
- 智能指针删除器和"using"名称为"pointer"关键字
- 通过指向其基的指针删除 POD 对象是否安全
- 模板化的出列无效指针:删除类时失败
- 使用"this"指针删除
- (C++) list.error 方法和使用指针删除内存