访问冲突新c ++结构

问题描述 投票:0回答:2

我有这个结构:

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.

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

c++ struct visual-studio-2017 new-operator access-violation
2个回答
1
投票

这段代码

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
投票

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

首先,你必须尝试一个struct只有一个bool变量,看看你的新功能是否正确

struct event_
    {
    bool is_crossover = false;
    };

event_ *n = new event_;

如果你的程序继续崩溃,你的错误就在那里,在new()中。

否则,你可以尝试减少你的结构,删除你认为正确的。

Personnaly,我认为你所有的qazxsw poi,qazxsw poi和qazxsw poi声明是正确的,所以我删除它们。我认为类似的对象声明也可以删除,我删除它们。

我有以下结构:

bool

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

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

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

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

拜托,你能试试吗?我想你会很快找到解决问题的方法!

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

© www.soinside.com 2019 - 2024. All rights reserved.