C ++设置结构成员的值**

时间:2015-09-23 15:58:44

标签: c++ struct config members

我在foo.h中定义了以下变量

#define APILONG          long
#define APIDOUBLE        double                   
#define APISTRING        const char*

还有以下结构

struct SetupData
{
  APISTRING customerName;
  APIDOUBLE quantity;
  APILONG startDate;

};

现在,在我的foo.cpp中,我有以下方法,我需要将值分配给从.config文件中提取的结构的成员。

APILONG doSomething(APISTRING* setupOrder, APILONG* setupActive, struct SetupData** setupData)
{
//load config file
Config config("rommel.config");

//assign a string value to APISTRING* (No issue here.)
*setupOrder= config.pString("setupOrder").c_str();

//assign a value (No issue here, atleast not that I know of..)
*setupActive = config.pDouble("setupActive");

//assign values to members of struct**
(*setupData)->customerName = config.pString("setupDataCustomerName").c_str();
(*setupData)->quantity = config.pDouble("setupDataQuantity");
(*setupData)->startDate = config.pDouble("setupDataStartDate");

//do other stuff..
}

当我编译和重建时,它不会给我任何错误消息。但是,当我尝试运行实际程序时,它会崩溃。 (使用Dev-C ++,Visual Studio导致问题..)  但是,我确实有机会在崩溃之前看到分配的值,看起来没有分配值(空或奇怪的字符)。

我尝试了各种变体 (*setupData)->startDate .. 我也试过在方法中声明结构如下,但无济于事。

    struct SetupData stpData;
    *setupData = &stpData;

非常感谢任何帮助。我之前发布了另一个与此相关的问题,它包含一些非常有用的信息。我会留下链接以防万一。 "C++ Set value for a char**"

1 个答案:

答案 0 :(得分:0)

config对象是doSomething函数的本地对象。

setupOrder指针指向似乎是a的内容 config对象的成员。

config对象将超出doSomething函数末尾的范围,并可在此时取消分配。
那时,setupOrder指针指向的是什么 可能不再有效。

确保在调用doSomething后结束时,确保最好 所有指针仍然指向仍然存在的对象。

您可能已经这样做了,但我只想查一下。