对象内的结构:解决分段错误问题

时间:2014-07-08 06:45:06

标签: c++

在尝试从类函数中访问类成员(类结构)时,我遇到了分段错误的问题。我假设我在某个地方宣布这个错误,但我看不出问题是什么。到目前为止,我尝试了许多变化而没有运气。任何帮助将不胜感激。

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我得到段错误,无论编译标志如何。

1 个答案:

答案 0 :(得分:1)

您的LEDGarden指向您从未设置的ButtonState

init方法使用相同名称的本地隐藏成员变量(因此当您使用它时,不会设置成员变量)。尝试

void LEDGarden::init(void) {
  this->the_state = new ButtonState();
  the_state->analog_pin = 5;
  initButtons();

}

你应该做的就是摆脱init()并使其成为构造函数。

不同的行为可能取决于成员变量设置为null或随机存储位置(可能是"好"或"坏",但从不"对& #34 ;; - )