0

我在返回一个我没想到的空向量时遇到了一些麻烦。有人可以帮忙解释一下吗!

这是有问题的部分: - 我知道回报是一样的,它现在是一个占位符。

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); }

我可以通过不允许它在空数据上运行来保护该函数,但我不禁觉得我在这里错过了一些基本的东西。

谢谢,乔

4

1 回答 1

0

修复者 - 有关详细信息,请参阅问题评论。

最初我从发布的函数返回来设置一个新的向量。它不喜欢它。

std::vector<std::vector<double> > results = pl.calculateLayer(); 

如果我将相同的代码分成两行,它会按预期工作。我猜 std::vector 的构造函数/副本不喜欢被赋予这个。

std::vector<std::vector<double> > results; 
results = pl.calculateLayer();
于 2013-08-27T09:58:22.443 回答