Reputation: 335
Here is a func for (i guess) transposing matrix executed, as an arg of a vector copy-constructor:
vector<vector<double>> tB(trans(B));
I have a segmention fault here:
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;
}
Doesn't matter, even if i do this:
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;
}
Upvotes: 0
Views: 63
Reputation: 16726
trans
returns a reference to an object on the stack, which is deleted when trans
returns. This is undefined behaviour. You should return a value, not a reference. So the only change is in the function signature.
vector<vector<double>> trans(vector<vector<double>>* matrix)
BTW, if you expect matrix to never be nullptr
, you should consider making it a reference (compare CppCoreGuidelines).
Upvotes: 1