作者:四只猪1984 | 来源:互联网 | 2023-10-12 11:16
篇首语:本文由编程笔记#小编为大家整理,主要介绍了访问冲突新c ++结构相关的知识,希望对你有一定的参考价值。
我有这个结构:
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;
这与上面的第二个替代方案相同。所有这些都是可能的,很难知道你真正想要的是什么,但基本的问题是你有一个字符串变量,并且你试图给它一个不是字符串的值。
另一答案
为了解决您的问题,我认为最好的办法是减少您的代码并尝试一些组合。
首先,你必须尝试一个struct
只有一个bool
变量,看看你的新功能是否正确
struct event_
bool is_crossover = false;
;
event_ *n = new event_;
如果你的程序继续崩溃,你的错误就在那里,在new()中。
否则,你可以尝试减少你的结构,删除你认为正确的。
Personnaly,我认为你所有的qazxsw poi,qazxsw poi和qazxsw poi声明是正确的,所以我删除它们。我认为类似的对象声明也可以删除,我删除它们。
我有以下结构:
bool
构建和运行此代码时会发生什么?
如果您的程序已停止崩溃,则错误是在删除的代码中?
否则,这个新结构的一个(或多个)声明的行是不正确的。
如果更改结构对代码有太大影响,则创建类似的结构(其他名称尚未使用)并进行测试。
拜托,你能试试吗?我想你会很快找到解决问题的方法!
您的第一个代码中有太多变量会导致崩溃?