访问违规新C 结构

Access violation new c++ struct

本文关键字:结构 访问      更新时间:2023-10-16

我有这个结构:

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;

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

您认为代码在做什么?显然,0不是string的整数。你是说这个吗?

string eLongitud_f = "0";

还是您的意思?

string eLongitud_f = "";

也许你甚至是说这个

double eLongitud_f = 0.0;

您也可以拥有此

string eLongitud_f;

与上面的第二个替代方案相同。所有这些都是可能的,很难知道您真正想要哪个,但是基本问题是您有一个字符串变量,并且您试图给它一个不是字符串的值。

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

首先,您必须尝试使用一个struct的一点CC_4,以查看您的新功能是否正确

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

当您构建和运行此代码时会发生什么?

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

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

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

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

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