我在返回一个我没想到的空矢量时遇到了一些麻烦。请有人帮忙解释一下!
这是令人讨厌的部分: - 我知道回报是相同的,它现在是一个占位符。
std::vector<std::vector<double> > PerceptronLayer::calculateLayer() {
std::vector<std::vector<double> > result;
if (vPerceptrons.size() == 0) {
return result;
}
return result;
}
但是,如果我确保向量有一些值,通过设置一些虚拟数据,函数会返回,如我所料。
std::vector<double> val;
val.push_back(1.0);
result.push_back(val);
GDB输出:
Program received signal SIGSEGV, Segmentation fault.
0x000000000040ba60 in std::vector<double, std::allocator<double> >::operator[] (this=0x0, __n=0)
at /usr/include/c++/4.7/bits/stl_vector.h:751
751 { return *(this->_M_impl._M_start + __n); }
我可以通过不允许它在空数据上运行来保护函数,但我不禁感到我在这里缺少一些基本的东西。
谢谢, 乔
答案 0 :(得分:0)
修正了 - 有关详细信息,请参阅问题评论。
最初我从发布的函数返回设置新的向量。它不喜欢它。
std::vector<std::vector<double> > results = pl.calculateLayer();
如果我将相同的代码分成两行,它会按预期工作。我猜std :: vector的构造函数/副本并不喜欢这样做。
std::vector<std::vector<double> > results;
results = pl.calculateLayer();