C ++中的读取访问违规

时间:2020-11-04 15:16:36

标签: c++ access-violation

那是我的错误。我尝试根据我提供的代码和不提供的代码使它更有条理。 通常,我正在编写一个可以测试的C ++ OpenGL应用程序,如果用火柴梗布置的两个图形是否匹配。我通过Test类进行交互,这只是我可以在OpenGL界面之上创建图形界面的方式。重要的是以下几行代码:

Figure fig1 = Figure();
Figure fig2 = Figure();
Figure* selected;

我有两个图形对象和一个指针。我可以在ImGui叠加层中选择1或2,这将依次将所选指针设置为fig1fig2。然后,我对鼠标事件进行测试,如果单击了鼠标,则可以计算出单击的点的xy位置。完美。

然后我想在图中添加新的线对象。我的图形被保存为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);
}

这是我对该功能的实现。该细分对于该问题并不是很重要。段选择是要编辑线的第一点还是第二点。它只是交替出现:如果单击一次,则编辑第一点。然后,在第二次单击后,第二次被编辑。选择正确的点后,我尝试构建一对计算出的xy坐标,并且在构建该对时会引发异常:

write access violation.
this was 0x18.

enter image description here

我的身材标头:

#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, int y, bool segment); //true seg1, false seg2
    
    //void Render();
    
};

1 个答案:

答案 0 :(得分:0)

我只是忘了在构造函数中设置指针。

相关问题