C++ C++;结构抛出内存转储

C++ C++;结构抛出内存转储,c++,visual-c++,visual-studio-2017,C++,Visual C++,Visual Studio 2017,我是一个老VC++DLL的“骄傲”继承人,并试图了解它的一个问题。我的前任在数据处理中使用了一些union/struct结构。现在我调试到他将数据放入结构中的程度,但整个应用程序崩溃,打印内存转储,没有try-catch工作 一个小的代码示例 MyCode.h: union { struct { double _dm; }; struct

我是一个老VC++DLL的“骄傲”继承人,并试图了解它的一个问题。我的前任在数据处理中使用了一些union/struct结构。现在我调试到他将数据放入结构中的程度,但整个应用程序崩溃,打印内存转储,没有try-catch工作

一个小的代码示例

MyCode.h:

union
    {
        struct                                  
        {   double _dm;
        };
        struct                                  
        {   double _dm;
            bool _links;
        };
        struct  
        {   double _dm;
            double _dummy;
            double _angle;
        };
        struct                                  
        {   double _dm;
            double _angle;
            double _dummy1;
            string _name;
            string _descr;
            double _param_d1, _param_d2, _param_d5;
            double _dummy2;
            string _dummy3;
            int _epuzae;
            int _param_i2;
            string _sob, _snr2, _param_s3, _param_s4;
            void *_data;
        };
        struct
        {   void *_data;
        };
    }
MyCode.cpp

... Rest of the method...
_dm = 100; // Will be set
_angle = 0; // Will be set
_dummy1 = 0; // Will be set
_name = "Unittest"; // Here it crashes the whole app
_descr = "This is a test";
_param_d1 = 1;
_param_d2 = 2;
_param_d5 = 5;
_dummy2 = 0;
_dummy3 = "";
_epuzae = 99;
_param_i2 = 101;
...
有没有一种方法来测试调用了什么结构构造函数,或者我在这里做错了什么

致意


Lord_Pinhead

在经历了许多麻烦和帮助后,为什么不使用struct和字符串,我昨天将其重构为一个类,运行起来像一个charme:

 class DPic {
public:
    DPic();
    ~DPic();

    double DM;
    double Angle;
    std::string Name;
    std::string Descr;
    double Param_d1, Param_d2, Param_d5;
    int Epuzae;
    int Param_i2;
    std::string Sob, Snr2, Param_s3, Param_s4;
    void *_data;
};

所以,如果有人在他的代码中发现了这一点,就扔掉它,使用适当的类或成员变量

请添加一个。具有非平凡类型(本例中为std::string)的联合不是平凡的,需要您做大量额外的工作。您基本上需要实现一个标记的联合。请参阅:什么是字符串?它是std::string吗?这个联合体是如何初始化的?一个人在使用
联合体时可能会出现很多可怕的错误。我们需要看看
联合体是如何被使用的,看看它是如何被滥用的。Rafael,是的,这是一个std::string Nathan,我会尝试一个带标签的版本,谢谢。我从未使用C++中的结构,我有类。迈克尔,我不骗你,第二部分就是一切,没有初始化。在Prod中,它以某种方式起作用。这家伙不是程序员,他是通过这个应用程序学会的,所以这就是我现在所拥有的一切。我明天进行单元测试并发布状态。