C ++ Struct引发内存转储

时间:2019-03-18 15:06:16

标签: c++ visual-c++ visual-studio-2017

我是旧VC ++ DLL的“骄傲”继承人,并尝试了解它的问题。我的前任使用了一些联合/结构构造来进行数据处理。现在,我调试它,直到他将数据放入结构中,但是整个应用程序崩溃了,打印了内存转储,并且没有try-catch起作用。

一个小的CodeExample。

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;
...

有没有一种方法可以测试称为struct的构造函数,或者我在这里做错了什么?

最诚挚的问候

大头针

1 个答案:

答案 0 :(得分:0)

在经历了很多麻烦和有用的链接之后,为什么不将struct与字符串一起使用,我昨天将其重构为一个类,就像一个咒语一样运行:

 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;
};

因此,如果有人在他的代码中找到了它,那就扔掉它并使用适当的类或成员变量。