分段故障(核心转储)linux

时间:2014-05-01 13:38:03

标签: c++ linux

我的程序运行正常,当我在VS上使用我自己的' main()'函数,但我必须提交这个主要隐藏我的地方我只知道它会将争论传递给我的函数并检查它们的返回结果。但是当我尝试使用传递给我的函数的arguement时,它会给出分段错误错误。 这是代码:

//I don't know what 'main' is passing to this function

string ExpressionManager::infixToPostfix(string infixExpression)
{   

cout<<infixExpression<<endl; // first it was giving error on below 'if' condition,  
    //now i have written this statement it prints nothing but gives 
     //Segmentation Fault (core dumped) error here

cout<<"Hey"<<endl //it doesn't print this line

if( infixExpression[0] == '\0' )
{
    return "";
}
int size = infixExpression.length();
if(!isValidInfixExpression(infixExpression))
    return "Invalid Expression";
      ...
      //some code here
}

当字符串类以这种方式运行时,任何人都可以详细说明吗?

2 个答案:

答案 0 :(得分:0)

如果将空字符串传递给方法,程序将崩溃。您应该在语句if( infixExpression[0] == '\0' )之前检查字符串的大小。您可以使用if(infixExpression.size()==0)if(infixExpression.empty())

来代替此条件

编辑:

以下代码会在函数调用之前导致崩溃:

              string* s= NULL;
              infixExpression(*s);

这是因为在调用该函数时,该参数将使用该对象的复制构造函数进行复制,但该对象不存在。

答案 1 :(得分:0)

我想我遇到了你的问题。请尝试以下代码:

string *p_to_void;
cout << *p_to_void;

上面的代码肯定会因未初始化的指针而导致分段错误。即使指针被初始化,也可能指向NULL,这也会导致段错误。空字符串不会导致问题,但是未初始化的指针会产生问题。