提问者:小点点

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


当我试图从类函数中访问一个类成员(它是一个结构)时,我遇到了一个分段错误的问题。我想我在某处声明这是错误的,但我看不出问题出在哪里。我试过很多变种,但到目前为止都没有运气。如有任何帮助,我们将不胜感激。

程序。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();
}

当我试图在函数中的结构中进行赋值时,会出现分段错误。我完全不知道问题出在哪里。

注意,当我使用gcc时,只要不使用标志,这个程序就可以正常工作。使用clang,无论编译标志如何,我都可以获得segfault。


共1个答案

匿名用户

您的有一个指向从未设置的的指针。

方法使用同名的本地文件对成员变量进行阴影处理(因此在使用时不会设置成员变量)。试试看

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

}

您可能应该做的是去掉并使其成为一个构造函数。

不同的行为可能取决于成员变量被设置为null或随机内存位置(可能是“好”或“坏”,但绝不是“正确”-)