我在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**"
答案 0 :(得分:0)
config
对象是doSomething
函数的本地对象。
setupOrder
指针指向似乎是a的内容
config
对象的成员。
config
对象将超出doSomething
函数末尾的范围,并可在此时取消分配。
那时,setupOrder
指针指向的是什么
可能不再有效。
确保在调用doSomething
后结束时,确保最好
所有指针仍然指向仍然存在的对象。
您可能已经这样做了,但我只想查一下。