我的程序处理访问在类内部定义的结构的属性。当我使用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);
}
答案 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);
}
用作指针,但是您尚未表明该原因。