C ++ Struct создает дамп памяти - PullRequest
0 голосов
/ 18 марта 2019

Я «гордый» наследник старой библиотеки VC ++ DLL и пытаюсь понять с ней проблему. Мой предшественник использовал некоторые конструкции union / struct для обработки данных. Теперь я отлаживал его до такой степени, что он помещал данные в структуру, но все приложение зависало, печатая дамп памяти и не пытаясь поймать работу.

Небольшой 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;
...

Есть ли метод для проверки того, какой конструктор структуры вызывается или что я здесь делаю неправильно?

С наилучшими пожеланиями

Lord_Pinhead

1 Ответ

0 голосов
/ 26 марта 2019

После многих неприятностей и полезных ссылок, почему бы не использовать 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;
};

Так что, если кто-нибудь когда-нибудь найдет это в своем коде,просто выбросьте его и используйте соответствующие классы или переменные-члены.

...