由于分段错误而停止了程序执行:11

时间:2019-02-20 04:27:17

标签: c++ segmentation-fault

我的程序处理访问在类内部定义的结构的属性。当我使用struct类型的指针显示结构的属性时,它将引发分段错误并停止执行。如果我只使用struct类型的变量,虽然可以很好地打印结构的属性。我尝试使用gdb调试代码,它显示分段错误发生在第27行,即poly.params->a = 1;。为什么在这种情况下我们不能使用指针,或者我犯了一个愚蠢的错误?这是代码示例:

#include <iostream>

using namespace std;

class QuadraticFunc
{
  public:
    QuadraticFunc(){};
    struct Coeff
    {
        double a;
        double b;
        double c;
    } * params;
    void ParamShow(const Coeff *params)
    {
        cout << "a: " << params->a << endl;
        cout << "b: " << params->b << endl;
        cout << "c: " << params->c << endl;
    }
    ~QuadraticFunc(){};
};

int main()
{
    QuadraticFunc poly;
    poly.params->a = 1;
    poly.params->b = 2;
    poly.params->c = 1;

    QuadraticFunc *polyPtr;

    polyPtr = &poly;

    cout << "The parameters for the first object: " << endl;
    polyPtr->ParamShow(poly.params);
}

2 个答案:

答案 0 :(得分:0)

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>

<div ng-app="myApp" ng-controller="myCtrl">

  <div ng-repeat="traveler in profiles">
    {{traveler.TravelerExtended.ExtendedInt_1.Label}} {{traveler.TravelerExtended.ExtendedInt_1.text}} <br/>
    {{traveler.TravelerExtended.ExtendedInt_2.Label}} {{traveler.TravelerExtended.ExtendedInt_2.text}} <br/>
    {{traveler.TravelerExtended.ExtendedInt_2.Label}} {{traveler.TravelerExtended.ExtendedInt_2.text}} <hr/>
  </div>

</div>

poly.params->a = 1; 尚未初始化。

替换

params

使用

struct Coeff
{
    double a;
    double b;
    double c;
} * params;

然后将每个struct Coeff { double a; double b; double c; } params; 替换为params->

答案 1 :(得分:0)

  

为什么在这种情况下我们不能使用指针?还是我犯了一个愚蠢的错误?

是的,你是

params.
  

我该如何解决?

最好的解决方案是避免将指针放在此处:

QuadraticFunc poly;  // Your constructor leaves poly.params uninitialized
poly.params->a = 1;  // Dereferencing uninitialized pointer invokes undefined behavior.

您可能有合理的理由将class QuadraticFunc { public: QuadraticFunc(){}; struct Coeff { double a; double b; double c; } params; ... }; int main() { QuadraticFunc poly; poly.params.a = 1; ... polyPtr->ParamShow(&poly.params); } 用作指针,但是您尚未表明该原因。