我有以下代码
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
函数调用结束后,它超出范围。那是对的吗?
答案 0 :(得分:4)
何时将释放存储在向量中的数据?测试函数调用结束后超出范围。那是对的吗?
是的。
如果要从该函数返回指针,它将是一个悬空指针。
但是,您的代码中还有一个细微的问题:您按值传递了指针t
,因此测试内部的赋值对t
中的main
无效。如果您在t
中使用main
,则可能会遇到段错误,这不是因为向量已经超出范围,而是因为您从未在t
中初始化main
。>
答案 1 :(得分:3)
是的,vector
对象tmp
的析构函数应该释放存储空间。您的程序表现出未定义的行为,或者至少在正确传递指针后会表现出来。