繁体   English   中英

访问冲突新的C ++结构

[英]Access violation new c++ struct

我有这个结构:

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.

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

此代码

string eLongitud_f = 0;

使用NULL指针调用字符串构造函数( 0是编写NULL指针的另一种方式),从而导致访问验证错误。

您认为该代码在做什么? 显然0是一个整数而不是一个string 你是这个意思吗

string eLongitud_f = "0";

还是这个意思?

string eLongitud_f = "";

也许你甚至是这个意思

double eLongitud_f = 0.0;

你也可以有这个

string eLongitud_f;

与上面的第二种选择相同。 所有这些都是可能的,很难知道您真正想要的是什么,但是根本的问题是您有一个字符串变量,并且您正试图给它一个非字符串的值。

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

首先,您必须尝试一个只有一个bool变量的struct ,以查看您的新函数是否正确

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM