函数返回时的分段错误

时间:2017-06-26 22:14:38

标签: c++

我是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也解决了问题。

我要求解释这种行为。

2 个答案:

答案 0 :(得分:2)

从返回类型不是return的函数中省略void语句是造成未定义行为的原因。

  

当我更改int的返回类型时,没有问题。

这是一种有效的未定义行为形式。根据您的观察方式,它可以被视为幸运/不幸。我认为这很不幸,因为问题仍然存在。

  

vector<string>返回fct也解决了问题。

这是实现一个应该返回vector<string>的函数的正确方法。

答案 1 :(得分:0)

排队:

 list2 = s.fct(list1);

您正在为&#39; list2&#39;分配值。因此,您必须从函数&#39; fct()&#39;中返回兼容类型。由于您返回的是不兼容的类型,因此会导致分段错误 注意如果您没有从函数返回值,函数返回类型为int,则返回任何int值。