如何解决C ++中的读取访问违规
那是我的错误。我尝试根据我提供的代码和不提供的代码使它更有条理。 通常,我正在编写一个可以测试的C ++ OpenGL应用程序,如果用火柴梗布置的两个图形是否匹配。我通过Test类进行交互,这只是我可以在OpenGL界面之上创建图形界面的方式。重要的是以下几行代码:
figure fig1 = figure();
figure fig2 = figure();
figure* selected;
我有两个图形对象和一个指针。我可以在ImGui叠加层中选择1或2,这将依次将所选指针设置为fig1
或fig2
。然后,我对鼠标事件进行测试,如果单击了鼠标,则可以计算出单击的点的x
和y
位置。完美。
然后我想在图中添加新的线对象。我的图形被保存为std::vector<line>
中的一组线。作为参考,我将在最后添加整个图形标题。现在,我按下鼠标时会调用这两个函数:
selected->SetWorking(posX,posY,m_Select); //
// -> HIER STECKT NH
if (m_Select) // FEHLER
selected->AddLine();
据我了解,我现在在所选指针所指向的对象上调用这两个函数。我将仅显示调用SetWorking()
之后发生的情况,这是最初引发异常的地方。如果排除两个方法调用,该程序将运行完美。如果我有一个被执行或两个都被执行,则会引发此错误。
void figure::SetWorking(int x,int y,bool segment)
{
if (segment)
{
p1 = Point(x,y);
}
p2 = Point(x,y);
}
这是我对该功能的实现。该细分对于该问题并不是很重要。段选择是要编辑线的第一点还是第二点。它只是交替出现:如果单击一次,则编辑第一点。然后,在第二次单击后,第二次被编辑。选择正确的点后,我尝试构建一对计算出的x
和y
坐标,并且在构建该对时会引发异常:
write access violation.
this was 0x18.
我的身材标头:
#pragma once
#include <Windows.h>
#include <vector>
#include <Defines.h>
class Point
{
public:
std::pair<int,int> coord;
Point()
{
coord = std::pair<int,int>{ 0,0 };
}
Point(int x,int y)
{
coord = std::pair<int,int>{ x,y };
};
};
class Line
{
public:
std::pair<Point,Point> pts;
Line()
{
pts = std::pair<Point,Point>{ Point(),Point() };
}
Line(Point p1,Point p2)
{
pts = std::pair<Point,Point>{ (Point)p1,(Point)p2 };
};
};
class figure
{
private:
std::vector<Line> lines;
Point p1 = Point();
Point p2 = Point();
char* renderPath = FILEPATH;
public:
figure() {};
public:
void DrawComponents();
void Clear();
void RemoveLine(int index);
void AddLine();
void SetWorking(int x,bool segment); //true seg1,false seg2
//void Render();
};
解决方法
我只是忘了在构造函数中设置指针。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。