从其他方法返回 vector 时,C++ 无法访问 vector 元素

标签 c++ vector

我有以下代码,它遍历 pqxx::result vector 的结果行。

std::unique_ptr<std::vector<pqxx::result::tuple>>
  filteredRowsPtr = getFilteredAssignmentRowsPtr(unfilteredRows);

std::vector<pqxx::result::tuple> filteredRows = *filteredRowsPtr;

for(int i = 0; i < filteredRows.size(); i++)
{
  returnMap[occurenceStudentIdStr] = returnMap[occurenceStudentIdStr] + 1; 
    pqxx::result::tuple currRow = filteredRows[i];

    for(int j = 0; j < currRow.size(); j++)
    {
        std::cout << "j = " << currRow[j] << endl;        
    }
}

filteredRowsPtrunique_ptrvector<pqxx::result::tuple>这是通过以下方法产生的:

std::unique_ptr<std::vector<pqxx::result::tuple>> 
CompletedExcersisesPerStudent::getFilteredAssignmentRowsPtr(pqxx::result unfilteredRows)
{
    std::vector<pqxx::result::tuple> rowsFilteredOnGradePercentile = filter.getRowsWithValidGradePercentile(unfilteredRows);
    std::vector<pqxx::result::tuple> filteredRows = filter.getRowsWithValidAssignmentTimes(rowsFilteredOnGradePercentile);

    return std::make_unique<std::vector<pqxx::result::tuple>>(filteredRows);
} 

vector 已填充(因为调用 size() 返回正数)并且我可以很好地迭代它,但是当我尝试使用

实际访问行中包含的元素时
currRow[j]

我遇到了段错误。

但是:当我替换对 getFilteredAssignmentsRowPtr() 的调用时使用以下内容,从而替换该方法的内容:

std::vector<pqxx::result::tuple> rowsFilteredOnGradePercentile = filter.getRowsWithValidGradePercentile(unfilteredRows);
std::vector<pqxx::result::tuple> filteredRows = filter.getRowsWithValidAssignmentTimes(rowsFilteredOnGradePercentile);

输出预期的结果,没有任何段错误。

我做错了什么?提前致谢!

最佳答案

您的错误似乎不可重现(因为您未能提供最小可验证完整示例),但您的设计无论如何都有缺陷:不要使用 s td::unique_ptr<std::vector> . std::vector已经支持内存管理,所以你不需要添加 unique_ptr . IHMO,正确的设计更像是

std::vector<pqxx::result::tuple>
getFilteredAssignmentRowsPtr(pqxx::result unfilteredRows)
{
  return filter.getRowsWithValidAssignmentTimes(
         filter.getRowsWithValidGradePercentile(unfilteredRows));
} 

auto filteredRows = getFilteredAssignmentRowsPtr(unfilteredRows);

for(int i = 0; i < filteredRows.size(); i++)
{
  returnMap[occurenceStudentIdStr] = returnMap[occurenceStudentIdStr] + 1; 
  auto currRow = filteredRows[i];

  for(int j = 0; j < currRow.size(); j++)
  {
     std::cout << "j = " << currRow[j] << endl;        
  }
}

关于从其他方法返回 vector 时,C++ 无法访问 vector 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44050951/

相关文章:

c++ - 错误1错误C1083:无法打开包含文件:'exercises.h':没有此类文件或目录

c++ - Qt:设置IP

C++ 参数化构造函数使代码在传递大输入时停止工作

c++ - 在 C++ 中通过初始化数组初始化 vector 时出现段错误

c++ - 如何使用 icc 编译器检查 gdb 中 std::vector 的内容?

c++ - 创建 CvSVM vector 的 vector (数组)

c++ - 将 Bitset 数组转换为 vector <bool>

c++ - 如何使用具有两列的模型获取 QComboBox 的当前值?

c++ - C++ 的 YAML 序列化库?

传递参数的 C++ 编译器优化