[英]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()中。
否则,您可以尝试简化结构,以消除您认为正确的内容。
就个人而言,我认为您的所有bool
, int
和event_
声明都是正确的,因此我将其删除。 我认为类似的对象声明也可以删除,而我也将它们删除。
我有以下结构:
struct event_
{
fecha fin_fecha;
locacion inicio_l;
string eLatitud_i = 0;
personaje_info personajes_evento;
};
构建并运行此代码时会发生什么?
如果您的程序已停止崩溃,则错误在于已删除的代码中?
否则,此新结构的一个(或多个)声明行不正确。
如果更改结构对代码的影响太大,请创建一个类似的结构(尚未使用的其他名称)并进行测试。
拜托,你可以试试吗? 我认为您会发现自己会很快解决问题!
您的第一个代码中有太多变量会导致崩溃?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.