C++ 如何在C++;

C++ 如何在C++;,c++,vector,segmentation-fault,glibc,C++,Vector,Segmentation Fault,Glibc,下面是一个(我猜)转置矩阵的func,作为向量复制构造函数的arg执行: vector<vector<double>> tB(trans(B)); 载体tB(trans(B)); 我这里有一个分段错误: vector<vector<double>>& trans(vector<vector<double>>* matrix) { vector<vector<double>> res

下面是一个(我猜)转置矩阵的func,作为向量复制构造函数的arg执行:

vector<vector<double>> tB(trans(B));
载体tB(trans(B));
我这里有一个分段错误:

vector<vector<double>>& trans(vector<vector<double>>* matrix)
{
    vector<vector<double>> result(matrix->size(), vector<double>(matrix->size(), 0.0)); <-- HERE   

    for (int i = 0; i < matrix->size(); ++i) {
        for (int j = 0; j < matrix->size(); ++j) {
            result.at(i).at(j) += matrix->at(j).at(i);
        }
    }

    return result;
}
矢量与变换(矢量*矩阵)
{
向量结果(矩阵->大小(),向量(矩阵->大小(),0.0));大小();+i){
对于(int j=0;jsize();++j){
结果.at(i).at(j)+=矩阵->at(j).at(i);
}
}
返回结果;
}
没关系,即使我这样做:

vector<vector<double>>& trans(vector<vector<double>>* matrix)
{
    vector<vector<double>> result; <-- AGAIN SIGSEGV ERROR 

    for (int i = 0; i < matrix->size(); ++i) {
        vector.push_back(vector<double>(matrix->size(), 0.0));
        for (int j = 0; j < matrix->size(); ++j) {
            result.at(i).at(j) += matrix->at(j).at(i);
        }
    }

    return result;
}
矢量与变换(矢量*矩阵)
{
向量结果;大小();++i){
vector.push_back(向量(矩阵->大小(),0.0));
对于(int j=0;jsize();++j){
结果.at(i).at(j)+=矩阵->at(j).at(i);
}
}
返回结果;
}

trans
返回对堆栈上对象的引用,该对象在
trans
返回时被删除。这是未定义的行为。您应该返回一个值,而不是引用。因此,唯一的变化是函数签名

vector<vector<double>> trans(vector<vector<double>>* matrix)
矢量变换(矢量*矩阵)

BTW,如果您期望矩阵永远不是<代码> NulLPTR < /C>,您应该考虑将其作为引用(比较)。

<代码> Trase<代码>返回对堆栈上对象的引用,该代码在<代码> Trase返回时被删除。这是未定义的行为。你应该返回一个值,而不是一个引用。@WernerHenze你是我的上帝!“天哪,我真蠢,嗯……”沃内伦兹,请写下来作为回答。我会标记它在这里会有帮助吗?