Нарушение прав доступа новая структура c ++ - PullRequest
0 голосов
/ 09 марта 2019

У меня есть такая структура:

struct event_ {

    bool is_crossover = false;
    bool is_birth = false;
    bool is_repetitive = false;

    int eID = 0;

    bool inicio_fin = false; 
    fecha inicio_fecha;
    fecha fin_fecha;

    locacion inicio_l;
    string eLatitud_i = 0; 
    string eLongitud_i = 0;

    locacion fin_l;
    string eLatitud_f = 0;
    string eLongitud_f = 0;

    personaje_info personajes_evento; //This is a class
    int cantidad_personajes = 0;

    string nombre;
    string descripcion;
    string tipo_evento;

    event_ *sig, *ant;
};

А потом, когда я вызываю функцию:

event_ *n = new event_;

отправляет мне сообщение об ошибке нарушения прав доступа:

Exception thrown at 0x0F69F6E0 (ucrtbased.dll) in Auxiliar Libros.exe: 0xC0000005: Access violation reading location 0x00000000.

Кто-нибудь знает, почему это происходит? В качестве дополнительной информации я запустил анализ метрик кода, а до этого программа работала отлично. А также он говорит мне об исключениях, что я должен делать?

Ответы [ 2 ]

1 голос
/ 09 марта 2019

Этот код

string eLongitud_f = 0;

вызывает строковый конструктор с указателем NULL (0 - еще один способ записи указателя NULL), что приводит к вашей ошибке проверки доступа.

Как вы думаете, что делает код? Очевидно, 0 является целым числом, а не string. Вы имели в виду это?

string eLongitud_f = "0";

Или ты это имел ввиду?

string eLongitud_f = "";

Может быть, вы даже имели в виду это

double eLongitud_f = 0.0;

Вы также можете просто иметь это

string eLongitud_f;

, что совпадает со вторым вариантом выше. Все это возможно, трудно понять, что вы действительно хотите, но основная проблема в том, что у вас есть строковая переменная, и вы пытаетесь присвоить ей значение, которое не является строкой.

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

Чтобы решить вашу проблему, я думаю, что лучшее, что нужно сделать, это уменьшить ваш код и попробовать несколько комбинаций.

Во-первых, вы должны попробовать немного struct только с одной переменной bool, чтобыпроверьте правильность вашей новой функции

struct event_
    {
    bool is_crossover = false;
    };

event_ *n = new event_;

Если ваша программа продолжает аварийно завершать работу, ваша ошибка в new ().

В противном случае вы можете попытаться уменьшить структуру, удаливвы думаете, что это правильно.

Персонально, я думаю, что все ваши декларации bool, int и event_ верны, поэтому я их удаляю.Я думаю, что подобное объявление объекта также может быть удалено, и я удаляю их.

У меня есть следующая структура:

struct event_
    {
    fecha fin_fecha;
    locacion inicio_l;
    string eLatitud_i = 0; 
    personaje_info personajes_evento;
    };

Что происходит при сборке и запуске этого кода?

Если ваша программа перестала работать с ошибкой, ошибка в удаленном коде?

Иначе, одна (или более) строка объявления этой новой структуры неверна.

Если изменение вашей структуры слишкомЭто сильно повлияло на ваш код, вы создали похожую структуру (другое название еще не использовалось) и протестировали ее.

Пожалуйста, вы можете попробовать?Я думаю, что вы найдете очень быстро решить проблему самостоятельно!

В вашем первом коде слишком много переменных, которые могут привести к сбою?

...