访问冲突新的C ++结构

时间:2019-03-09 06:09:27

标签: c++ struct visual-studio-2017 new-operator access-violation

我有这个结构:

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.

任何人都知道为什么会这样吗? 作为附加信息,我运行了代码度量分析,在此之前,该程序运行良好。而且它还告诉我有关异常的信息,我该怎么办?

1 个答案:

答案 0 :(得分:0)

要解决您的问题,我认为最好的办法是减少代码并尝试一些组合。

首先,您必须尝试仅使用一个struct变量的一点bool来查看新函数是否正确

struct event_
    {
    bool is_crossover = false;
    };

event_ *n = new event_;

如果您的程序继续崩溃,则错误在new()中。

否则,您可以尝试减少结构,以消除您认为正确的内容。

老实说,我认为您的所有boolintevent_声明都是正确的,因此我将其删除。 我认为类似的对象声明也可以删除,而我也将它们删除。

我具有以下结构:

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

构建并运行此代码时会发生什么?

如果您的程序已停止崩溃,则错误在于已删除的代码中?

否则,此新结构的一个(或多个)声明行不正确。

如果更改结构对代码的影响太大,请创建一个类似的结构(尚未使用的其他名称)并进行测试。

请,您可以尝试吗?我认为您会发现自己会很快解决问题!

您的第一个代码中有太多变量会导致崩溃?