[英]C++ segmentation fault
我是C ++的新手,它是编写和调试该语言所需的内存细微差别。 谁能告诉我下面的代码为什么给我分段错误?
string Polynomial::toString(){
int i, exponent;
stringstream result;
for (i = 0; i < coeffs.size(); i++){
// For first non-zero coefficient
if (result.str().empty()){
if(coeffs[i] < 0)
result << "-";
if(coeffs[i] != 0)
result << coeffs[i];
}
else{
if(coeffs[i] < 0)
result << " - " << abs(coeffs[i]);
else if(coeffs[i] > 0)
result << " + " << coeffs[i];
}
exponent = (coeffs.size() - i - 1);
if (coeffs[i] != 0){
if (exponent > 1)
result << coeffs[i] << "x^" << exponent;
else if(exponent == 1)
result << coeffs[i] << "x";
}
}
result.str();
}
您可能正在调用该函数并将结果分配给某些对象:
Polynomial p = ....;
std::string s = p.toString();
由于您在Polynomial::toString()
没有返回语句,该语句本身是未定义的行为,因此很容易导致分段冲突。 您可以通过返回stringstreams
的`string轻松解决此问题:
return result.str();
您的函数缺少一个return语句(可能只是return
部分)。 根据该标准,根据C ++ 11标准的6.6.2 / 2节(如下所示),除main
以外具有返回类型的main
上的任何函数都达到右括号是不确定的,尽管通常会导致崩溃它可能并不总是这样做。
除此之外,没有什么可能导致不确定的行为或崩溃。 您要做的是添加return
部分:
return result.str();
值得一提的是,GCC 4.7.2发出以下警告:
警告:函数中没有return语句,返回非空[-Wreturn-type]
始终利用编译器可以并且会给您的警告。
标准参考:
流向函数的末尾等同于没有值的返回; 这导致返回值函数中的行为未定义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.