2014-07-08 11 views
0

我在嘗試從類函數內訪問類成員(結構)時遇到了分段錯誤問題。我假設我在某處宣佈這個錯誤,但我看不出問題是什麼。到目前爲止,我嘗試了很多變化,但沒有運氣。任何幫助將不勝感激。對象中的結構:解決分段錯誤問題

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,無論編譯標誌如何,我都會得到segfault。

+0

你有一個令人信服的存儲指針而不是對象的原因? – juanchopanza

回答

1

您的LEDGarden有一個指向您從未設置的ButtonState

init方法使用本地相同名稱來遮蔽成員變量(因此,當您使用它時,未設置成員變量)。嘗試

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

} 

你應該做的是擺脫init()什麼,並使它成爲一個構造函數。

不同的行爲可能取決於什麼成員變量設置爲空或隨機存儲位置(這可能是「好」或「壞」,但從來沒有「正確」 ;-)

+0

甚至可能擺脫指針和動態分配。 – juanchopanza