微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C ++中的读取访问违规

如何解决C ++中的读取访问违规

那是我的错误。我尝试根据我提供的代码和不提供的代码使它更有条理。 通常,我正在编写一个可以测试的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,bool segment); //true seg1,false seg2
    
    //void Render();
    
};

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。