Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;写访问冲突 < >我写了一个C++ OpenGL应用程序,如果两个数字匹配的话,应该测试它是否相同。我编写了一个自己的类:“figure”类。这个类使用两个类“线”和“点”。在这里,您可以在figure.h标题中看到我的实现: #定义SHINT short int 类点 { 公众: 配对坐标; 点() { coord=std::pair{0,0}; } 点(整数x,整数y) { coord=std::对{(短)x,(短)y}; }; }; 班级线 { 公众: std::配对pts; 第()行 { pts=std::pair{Point(),Point()}; } 直线(点p1、点p2) { pts=std::对{(点)p1,(点)p2}; }; }; 班级人数 { 公众: 图(){}; 私人: std::矢量线; p1点; p2点; char*renderPath=FILEPATH; 公众: 无效组件(); 无效清除(); 空洞移除线(内部索引); void AddLine(); 无效设置工作(整数x,整数y,布尔段);//真seg1,假seg2 void Render(); };_C++_Access Violation - Fatal编程技术网

C++;写访问冲突 < >我写了一个C++ OpenGL应用程序,如果两个数字匹配的话,应该测试它是否相同。我编写了一个自己的类:“figure”类。这个类使用两个类“线”和“点”。在这里,您可以在figure.h标题中看到我的实现: #定义SHINT short int 类点 { 公众: 配对坐标; 点() { coord=std::pair{0,0}; } 点(整数x,整数y) { coord=std::对{(短)x,(短)y}; }; }; 班级线 { 公众: std::配对pts; 第()行 { pts=std::pair{Point(),Point()}; } 直线(点p1、点p2) { pts=std::对{(点)p1,(点)p2}; }; }; 班级人数 { 公众: 图(){}; 私人: std::矢量线; p1点; p2点; char*renderPath=FILEPATH; 公众: 无效组件(); 无效清除(); 空洞移除线(内部索引); void AddLine(); 无效设置工作(整数x,整数y,布尔段);//真seg1,假seg2 void Render(); };

C++;写访问冲突 < >我写了一个C++ OpenGL应用程序,如果两个数字匹配的话,应该测试它是否相同。我编写了一个自己的类:“figure”类。这个类使用两个类“线”和“点”。在这里,您可以在figure.h标题中看到我的实现: #定义SHINT short int 类点 { 公众: 配对坐标; 点() { coord=std::pair{0,0}; } 点(整数x,整数y) { coord=std::对{(短)x,(短)y}; }; }; 班级线 { 公众: std::配对pts; 第()行 { pts=std::pair{Point(),Point()}; } 直线(点p1、点p2) { pts=std::对{(点)p1,(点)p2}; }; }; 班级人数 { 公众: 图(){}; 私人: std::矢量线; p1点; p2点; char*renderPath=FILEPATH; 公众: 无效组件(); 无效清除(); 空洞移除线(内部索引); void AddLine(); 无效设置工作(整数x,整数y,布尔段);//真seg1,假seg2 void Render(); };,c++,access-violation,C++,Access Violation,问题功能的实现如下所示: void Figure::AddLine() { Line l1 = Line(p1, p2); lines.push_back(l1); } void Figure::SetWorking(int x, int y, bool segment) { if (segment) { p1 = Point(x, y); } p2 = Point(x, y); } 我有一个fig*,可以设置为第一个图形

问题功能的实现如下所示:


void Figure::AddLine()
{
    Line l1 = Line(p1, p2);
    lines.push_back(l1);
}


void Figure::SetWorking(int x, int y, bool segment)
{
    if (segment)
    {
        p1 = Point(x, y);
    }
    p2 = Point(x, y);
}

我有一个fig*,可以设置为第一个图形或第二个图形。你可以借助ImGui覆盖来实现这一点。如果按下鼠标按钮,将触发一组功能:

selected->SetWorking(posX、posY、m_-Select);//
如果(m_选择)
选中->添加行();
posX和posY是相对于鼠标位置计算的,因此工作正常。 然后,我们在figure指针上调用SetWorking()函数,该函数再次调用点中的构造函数,并将工作点设置为posX和Y。我必须指出轮流使用的要点。因此,如果我第一次单击,第一个点被设置,如果我第二次按下,第二个点被设置,设置了两个点,我们将一条新线推到向量中。这种改变是通过SetWorking()函数中的“segment”bool int实现的。点保存为包含短整数的std::对,线保存为包含两个点的std::对。但如果我们到达那里,就会出现一个错误:“抛出异常:写入访问冲突。 这是0x14“ 错误在C++ STL的实用文件中被抛出:(第292行)

pair&operator=(\u Identity\u t\u Right)无例外(
连词(v)/*加强*/{
first=_stdforward(_Right.first);//“这是0x14”:在
pair
的成员函数(运算符=())中发生错误。执行运算符=()的pair对象的this指针的值为0x14,这不太可能是正确的

通常这意味着该对是指针==nullptr的对象的成员,并且该对对象位于相对于类的偏移量0x14处


我怀疑所选的
是一个空指针,p1的赋值会导致访问冲突。

我怀疑代码中没有显示错误。您能给我们提供足够的代码来复制错误,并确认仅用您提供的代码就可以复制错误吗?
#define SHINT short int
请不要使用stan内置类型的dard名称。还建议改用固定大小的整数。@DavidSchwartz通过断点将错误缩小到两个函数:Addline()和SetWorking()在构建堆栈溢出示例时,请从中汲取灵感。它不仅能为我们提供帮助您所需的所有信息,而且是一种强大的调试技术。当您将代码筛选到MRE时,您很有可能自己发现并修复错误。@onefriendlyprogrammer然后为我们提供代码,其中只包含那些回复解决错误。如果你把它缩小到那些函数,那应该很容易。但我怀疑你会发现你需要更多的代码来完成它。(最有可能的是,这两个函数是受害者,错误在别处。)@MornigDewd这听起来非常合理。我目前正在工作,无法尝试解决这一问题,但我认为你的猜测我是对的。没有想到这样的事情,但它非常有意义!非常感谢!我将稍后尝试解决此问题,而不是关闭此线程!非常感谢!