gpt4 book ai didi

C++写访问冲突

转载 作者:行者123 更新时间:2023-12-03 07:22:33 29 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





What is a debugger and how can it help me diagnose problems?

(2 个回答)



What can cause segmentation faults in C++? [closed]

(9 个回答)


1年前关闭。




所以我正在编写一个 c++ OpenGl 应用程序,它应该测试两个匹配的数字是否相同。我写了一个自己的类:“figure”类。此类使用“线”和“点”两个类。在这里,您可以在 figure.h header 中看到我的实现:

#define SHINT short int

class Point
{
public:
std::pair<SHINT, SHINT> coord;
Point()
{
coord = std::pair<SHINT, SHINT>{ 0, 0 };
}
Point(int x, int y)
{
coord = std::pair<SHINT, SHINT>{ (short)x, (short)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
{
public:
Figure() {};

private:
std::vector<Line> lines;
Point p1;
Point p2;
char* renderPath = FILEPATH;
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();

};
有问题的函数的实现如下:

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);
}

我有一个图*,可以设置为第一个图或第二个图。您可以借助 ImGui 覆盖来做到这一点。如果您按下鼠标按钮,则会触发一组功能:
selected->SetWorking(posX, posY, m_Select);     //         

if (m_Select)
selected->AddLine();
posX 和 posY 是相对于鼠标位置计算的,并且工作正常。
然后我们在图形指针上调用 SetWorking() 函数,该函数再次调用 Point 中的构造函数并将工作点设置为 posX 和 Y 的值。我必须轮流使用的积分。所以如果我第一次点击,第一个点被设置,如果我第二次点击,第二个点被设置,并且设置了两个点,我们将一条新线插入 vector 中。这种改变是通过 SetWorking() 函数中的“段” bool 值实现的。点保存为保存短整数的 std::pairs<>,线保存为保存两个点的 std::pairs<>。但是如果我们降落在那里,就会发生错误:“抛出异常:写访问冲突。
这是 0x14"
在 c++ STL 的实用程序文件中抛出错误:(第 292 行)
pair& operator=(_Identity_t<_Myself&&> _Right) noexcept(
conjunction_v<is_nothrow_move_assignable<_Ty1>, is_nothrow_move_assignable<_Ty2>>) /* strengthened */ {
first = _STD forward<_Ty1>(_Right.first); // <---- here
second = _STD forward<_Ty2>(_Right.second);
return *this;
}
老实说,在这一点上,我对那里发生的事情一无所知。我有根据的猜测是,std::pair 出了问题,但我对 c++ 还不熟练,所以我现在真的不知道如何解决这些错误

最佳答案

“这是 0x14”:pair 的成员函数 (operator=()) 中发生错误.执行 operator=() 的 pair 对象的 this 指针的值为 0x14,这不太可能是正确的。
通常这意味着该对是具有此指针 == nullptr 的对象的成员,并且该对对象位于相对于类的偏移量 0x14 处。
我怀疑 selected是一个空指针,p1 的赋值导致访问冲突。

关于C++写访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64670928/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com