替换每个
我的程序处理访问类中定义的结构的属性。当我使用类型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
作为指针,但您尚未显示该原因可能是什么。