我有一些麻煩,返回一個空的向量,我不期待。請有人幫忙解釋一下!C++ Segfault當返回一個空向量包含向量
這是違規的部分: - 我知道回報是相同的,它是一個現在的佔位符。
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); }
我能不能讓它空上運行的數據保護功能,但我不禁覺得我在這裏失去了一些東西根本。
謝謝, 喬
你能向我們展示完整的代碼?很難說你發佈的代碼有什麼問題。 – Mahesh
使用GDB命令'up'來通過調用堆棧。它看起來像你的代碼中的某個地方,返回值被認爲是非空的。 – timrau
啊,好的。是的,我認爲我發現了它。我已經返回到:std :: vector> results = pl.calculateLayer();如果我將它分成兩行,它可以工作:\t \t std :: vector > results; \t \t results = pl.calculateLayer(); –
joeButler