程序执行因细分故障而停止:11



我的程序处理访问类中定义的结构的属性。当我使用类型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);
}
poly.params->a = 1;

params尚未初始化。

替换

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

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

,然后用params.

替换每个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);
}

您可能有合理的理由将params作为指针,但您尚未显示该原因可能是什么。

相关内容

  • 没有找到相关文章

最新更新