我是c ++的初学者,我开始编写一个非常基本的c ++程序:
class Solution {
public:
vector<string> fct(vector<string>& list1);
};
vector<string> Solution::fct(vector<string>& list1)
{
vector<string>::iterator it;
//vector<string> *ret = new vector<string>;
for (it=list1.begin();
it!=list1.end();
it++)
{
cout<<(*it)<<endl;
}
//return(*ret); /*This resolved the problem*/
}
当fct
返回时,对函数fct
的调用会导致分段错误:
int main()
{
Solution s;
vector<string> list1;
list1.push_back("X");
list1.push_back("Y");
list1.push_back("Z");
s.fct(list1);
}
int
的返回类型时,没有问题。vector<string>
返回fct
也解决了问题。我要求解释这种行为。
答案 0 :(得分:2)
从返回类型不是return
的函数中省略void
语句是造成未定义行为的原因。
当我更改
int
的返回类型时,没有问题。
这是一种有效的未定义行为形式。根据您的观察方式,它可以被视为幸运/不幸。我认为这很不幸,因为问题仍然存在。
从
vector<string>
返回fct
也解决了问题。
这是实现一个应该返回vector<string>
的函数的正确方法。
答案 1 :(得分:0)
排队:
list2 = s.fct(list1);
您正在为&#39; list2&#39;分配值。因此,您必须从函数&#39; fct()&#39;中返回兼容类型。由于您返回的是不兼容的类型,因此会导致分段错误 注意如果您没有从函数返回值,函数返回类型为int,则返回任何int值。