我有以下代码,它迭代pqxx::result
行向量的结果。
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;
}
}
filteredRowsPtr
是unique_ptr
到vector<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);
}
向量被填充(因为在它上面调用size()
返回一个正数)并且我可以很好地迭代它,但当我尝试使用
currRow[j]
我遇到了分段错误。
但是:当我用以下内容替换对getFilteredAssignmentsRowPtr()
的调用时,因此替换了该方法的内容:
std::vector<pqxx::result::tuple> rowsFilteredOnGradePercentile = filter.getRowsWithValidGradePercentile(unfilteredRows);
std::vector<pqxx::result::tuple> filteredRows = filter.getRowsWithValidAssignmentTimes(rowsFilteredOnGradePercentile);
预期结果输出时没有任何段错误。
我做错了什么?提前谢谢!
答案 0 :(得分:1)
您的错误似乎无法重现(因为您未能提供最小可验证的完整示例),但您的设计无论如何都有缺陷:请勿使用s asNavFor
。 td::unique_ptr<std::vector>
已经支持内存管理,因此您无需使用std::vector
添加内存管理。 IHMO,正确的设计更像是
unique_ptr
答案 1 :(得分:0)
我修改了此问题,方法是更改getFilteredAssignmentRows
以返回向量而不是您建议的唯一ptr,以及将引用传递给pqxx::result
到getFilteredAssignmentRows
,如下所示:< / p>
std::vector<pqxx::result::tuple> CompletedExcersisesPerStudent::getFilteredAssignmentRowsPtr(pqxx::result& unfilteredRows)
{
std::vector<pqxx::result::tuple> rowsFilteredOnGradePercentile = filter.getRowsWithValidGradePercentile(unfilteredRows);
return filter.getRowsWithValidAssignmentTimes(rowsFilteredOnGradePercentile);
}
这是有效的,因为filter.getRowsWithValidGradePercentile
被定义为引用pqxx::result
而不是pqxx::result
本身。
我一定是误读了这个。
非常感谢!