向量中的数据何时释放
When will the data from a vector freed?
我有以下代码
void test(MyDataType * t)
{
vector<MyDataType> tmp;
tmp.push_back(MyDataType(2,24));
t = tmp.data();
}
void test2()
{
MyDataType * t;
test(t);
// Do some stuff with the data pointed by t
}
存储在矢量中的数据何时释放?在test
函数调用结束后,它超出了作用域。这是正确的吗?
存储在矢量中的数据何时释放?测试函数调用结束后,它超出了范围。这是正确的吗?
是正确的。
如果您要从函数返回指针,那么它将是一个悬空指针。
然而,代码中还有另一个微妙的问题:通过值传递指针t
,因此测试内部的赋值不会对main
中的t
产生影响。如果您在main
中使用t
,您可能会得到segfault,这不是因为矢量已经超出范围,而是因为您从未在main
中初始化t
。
vector
对象tmp
的析构函数应该释放存储空间。你的程序表现出未定义的行为,或者至少如果你正确地传递了指针,它会表现出来。
相关文章:
- 释放错误后堆使用
- 何时在引用或唯一指针上使用移动语义
- G锁定铸造到基础上会释放模拟行为
- 何时提供默认参数作为模板参数
- 在将变量声明为引用时,堆在释放后使用
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 向量中的数据何时释放
- C++何时使用 delete[] 并正确释放内存?
- RAII 套接字:何时释放(关闭)
- 如果/何时回收释放的堆内存
- C++自动内存:何时释放
- 如果您使用new来分配空间,您必须在何时释放它
- std::shared_ptr何时释放其对象
- 堆内存实际何时释放
- 何时使用alloca为类成员释放内存
- 何时释放内存
- 如何检测键何时被释放(SDL 2.0)
- 在linux上复制文件到usb,如何以编程方式知道何时文件被提交和usb可以被释放
- 获取唯一编号并知道它们何时被释放
- 智能指针如何知道何时释放程序崩溃时的资源