gpt4 book ai didi

c++ - 指向 vector : size is correct in function but 0 in caller 的指针

转载 作者:搜寻专家 更新时间:2023-10-30 23:59:58 24 4
gpt4 key购买 nike

我有一个简单的函数,我简化它只返回一个虚拟列表(以确保它不是一些逻辑错误)

vector<AttrValue>* QueryEvaluator::getCandidateList(...) {
...
values.clear();
values.push_back(2);
values.push_back(3);
cout << "values is of size " << values.size() << endl;
return &values;
}

然后在 cppunit 测试中:

vector<AttrValue>* candidateList0 = evaluator->getCandidateList(cl, 0);
cout << candidateList0->size() << endl;

但问题是 size() 在测试中始终为 0,即使 cout 消息打印出正确的大小 2。可能有什么问题?

我尝试了一个简单的程序,它似乎没问题......

#include <iostream>
#include <vector>
using namespace std;

vector<int>* test() {
vector<int> vec { 2, 3, 6, 1, 2, 3 };
return &vec;
}

int main() {
cout << test()->size() << endl;
return 0;
}

最佳答案

您正在从getCandidateList 函数返回一个临时对象的地址,该对象在函数返回时释放。访问它是未定义的行为。你可以返回 vector ,RVO应该来申请并删除拷贝:

尝试:

std::vector<AttrValue> QueryEvaluator::getCandidateList(...) 
{
//blah
return values;
}

I tried a simple program and it appears to be fine ...

当 getCandidateList 函数返回时释放临时 vector 。该程序具有未定义的行为。

关于c++ - 指向 vector : size is correct in function but 0 in caller 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14520394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com