2015-05-01 59 views
0

我有一个名为“StatusInformation”的类,我想将变量_status设置为true/false,但我仅获得“分段错误”。我认为,_status不存在,因为我从其他课程中调用它。任何人都知道如何防止这个错误?来自其他类的安装程序

StatusInformation.cpp

void StatusInformation::SetClientConnectStatus(bool status) 
{ 
    _status = status; 
} 

StatusInformation.h

class StatusInformation 
{ 
private: 

    bool _status = false; 

public: 

    void SetClientConnectStatus(bool status); 
}; 

CallerClass.cpp

_statusInformation = new StatusInformation(); 

_statusInformation->SetClientConnectStatus(true); 

CallerClass.h

StatusInformation *_statusInformation; 
+1

这显然不是你的所有代码,也没有足够的答案给出明智的答案。 – John3136

+0

你说得对,这不是我的全部代码,我应该给你4050行代码吗?这是重要的代码,其他代码并不重要,因为它在没有此代码的情况下工作。 – ForJ9

+0

你为什么要在头文件中放一个指针声明? – Qix

回答

1

编辑︰到您的代码的链接只是给我缺少ArduinoProtocol的代码。

对我来说,这个编译有2个关于非静态数据成员初始值设定项的警告,然后运行正常。我真的不相信分段错误可能来自此代码。唯一可能导致的原因是

_statusInformation = new StatusInformation(); 

失败并返回0,使您的指针成为空指针。曹景伟:

_statusInformation->SetClientConnectStatus(true); 

等同于:

NULL->SetClientConnectStatus(true); 

但是,这只能发生,如果您选择使用一个没有抛出新的。你指定的很多。所以现实地说,代码中唯一可能会导致分段错误的事情不会发生。最糟糕的情况是std :: bad_alloc会被抛出。

+0

我看到我的错误,谢谢你的提示。我在构造器中创建了一个新线程,并等待同步。这给了我一个NULL指针 – ForJ9

+0

所以你实际上得到一个NULL指针?呵呵。我也无法编译完整的代码来运行它的valgrind。 (哦,是的,检查未来所有分段故障valgrind。) – Khaldor

+0

晚上会回来。如果这只是一个分段错误,无论何时你正在做c/C++并且想要更近一些地看看内存中发生了什么,请查看valgrind http://valgrind.org/ brilliant。 – Khaldor