声明类的全局对象后系统崩溃

时间:2010-04-16 05:42:21

标签: c++ pointers global unsafe-pointers

我对c ++很新。我在执行以下操作时遇到系统崩溃(而不是编译错误):

我正在声明类的全局指针。

BGiftConfigFile  *bgiftConfig;
class BGiftConfigFile : public EftBarclaysGiftConfig { }

在这个类中我正在读取XML文件中的标签。当此指针用于检索值时,它是崩溃系统。我正在为verifone终端编码。

int referenceSetting = bgiftConfig->getreferencesetting(); //system error

getreferencesetting()是类 EftBarclaysGiftConfig的成员函数

在这种情况下,我对指针的行为感到困惑。我知道我做错了但却无法纠正。

当我在本地声明一个类的对象时,它会正确地检索该值。

BGiftConfigFile  bgiftConfig1; 
int referenceSetting = bgiftConfig1.getreferencesetting(); //working

但如果我将此对象声明为全局,它也会使系统崩溃。

我需要在代码中的不同位置获取值,因此我不得不使用全局的东西。

如何纠正这个问题?

3 个答案:

答案 0 :(得分:1)

您的本地是堆栈分配的实例。

您的global是一个指针,需要在开始使用之前通过调用new来分配:

bgiftConfig = new BGiftConfigFile();

答案 1 :(得分:1)

首先向前声明类BGiftConfigFile,然后声明指向类对象的指针,如下所示

class BGiftConfigFile
 BGiftConfigFile  *bgiftConfig;
class BGiftConfigFile : public EftBarclaysGiftConfig { };

然后使用new运算符

为指针对象分配空间
bgiftConfig = new BGiftConfigFile(); // depends upon what constructors you have defined in your class

完成指针删除后,使用删除操作符

进行删除
delete bgiftConfig;

答案 2 :(得分:1)

  

我需要在我的代码中的不同位置获取值,所以我不得不使用某些全局。

不,你不需要全球性的东西。您可以将此对象的非全局实例传递给需要它的代码。