在尝试从类函数中访问类成员(类结构)时,我遇到了分段错误的问题。我假设我在某个地方宣布这个错误,但我看不出问题是什么。到目前为止,我尝试了许多变化而没有运气。任何帮助将不胜感激。
program.h:
struct ButtonState {
int analog_pin;
};
class LEDGarden {
public:
ButtonState *the_state;
LEDGarden(void) {}
void init(void);
void initButtons(void);
};
program.cpp:
#include "program.h"
void LEDGarden::init(void) {
ButtonState *the_state = new ButtonState();
the_state->analog_pin = 5;
initButtons();
}
void LEDGarden::initButtons(void) {
// The problem happens here.
the_state->analog_pin = 5;
}
int main() {
LEDGarden garden;
garden.init();
}
当我尝试在函数initButtons
中的结构中进行赋值时,会发生分段错误。关于问题是什么,我感到很遗憾。
请注意,只要我不使用-O2
标志,这个程序在使用gcc时就可以正常工作。使用clang我得到段错误,无论编译标志如何。
答案 0 :(得分:1)
您的LEDGarden
指向您从未设置的ButtonState
。
init
方法使用相同名称的本地隐藏成员变量(因此当您使用它时,不会设置成员变量)。尝试
void LEDGarden::init(void) {
this->the_state = new ButtonState();
the_state->analog_pin = 5;
initButtons();
}
你应该做的就是摆脱init()
并使其成为构造函数。
不同的行为可能取决于成员变量设置为null或随机存储位置(可能是"好"或"坏",但从不"对& #34 ;; - )