c++ - 操作员问题 - 访问冲突
c++ - operator trouble - access violation
我在结构的重载运算符中遇到了一些访问冲突问题。我意识到我做错了什么,这很可能是一个愚蠢的错误,但我不确定它可能在哪里。
我有以下内容:
struct Circle
{
Circle() : innerCircle(nullptr) {}
Circle * const innerCircle;
Circle& operator =(Circle *inner)
{
innerCircle[0] = inner; // Exception thrown: read access violation. this was nullptr.
return *this;
}
}
void somefunction(Circle * c)
{
Circle *c2 = new Circle();
c->innerCircle[0] = c2;
}
提前感谢大家的帮助!
Object * const obj; // read right-to-left: const pointer to Object
Object const * obj; // read right-to-left: pointer to const Object
Object const * const obj; // read right-to-left: const pointer to const Object
看这里
Const before or const after?
所以你有一个常量指针,它在构造函数本身中被初始化为 null。所以你以后不能改变它。所以在行
c->innerCircle[0] = c2;
您正在获取并将始终获取空值。
您的问题似乎是关于指针的推理,而不是任何特定于运算符的问题。
I have the const pointer to a Circle. So, my pointer cannot change address
true - 无论您的 const 指针初始化指向什么对象,它都永远不会更改为指向其他对象。
however the Circle value itself inside the address can change
是的,如果您的 const 指针指向一个对象,您可以就地改变该对象
So my attempt is to change the Circle value inside innerCircle
但这假定 innerCircle
指向一个对象。您将其初始化为 nullptr
,这意味着它 不指向任何对象 。这就是 nullptr
(或旧的 NULL
) 的意思。
因为你的指针没有指向一个对象,所以那里没有任何东西你可以合法地改变。由于您声明了指针 const
,因此您也无法将其更改为指向真实对象。
之后,正如borgleader所说,你得到了循环问题的递归定义。
也许 Circle
应该有一个指向圆的(可能是 nullptr)指针,如果需要,它可以变异为指向 Circle
?例如
struct Circle
{
Circle() : innerCircle(nullptr) {}
Circle* innerCircle;
void insert(Circle *inner)
{
innerCircle = inner;
}
bool hasInner() const { return (innerCircle != nullptr); }
Circle* getInner() const) { return innerCircle; }
};
我在结构的重载运算符中遇到了一些访问冲突问题。我意识到我做错了什么,这很可能是一个愚蠢的错误,但我不确定它可能在哪里。
我有以下内容:
struct Circle
{
Circle() : innerCircle(nullptr) {}
Circle * const innerCircle;
Circle& operator =(Circle *inner)
{
innerCircle[0] = inner; // Exception thrown: read access violation. this was nullptr.
return *this;
}
}
void somefunction(Circle * c)
{
Circle *c2 = new Circle();
c->innerCircle[0] = c2;
}
提前感谢大家的帮助!
Object * const obj; // read right-to-left: const pointer to Object
Object const * obj; // read right-to-left: pointer to const Object
Object const * const obj; // read right-to-left: const pointer to const Object
看这里
Const before or const after?
所以你有一个常量指针,它在构造函数本身中被初始化为 null。所以你以后不能改变它。所以在行
c->innerCircle[0] = c2;
您正在获取并将始终获取空值。
您的问题似乎是关于指针的推理,而不是任何特定于运算符的问题。
I have the const pointer to a Circle. So, my pointer cannot change address
true - 无论您的 const 指针初始化指向什么对象,它都永远不会更改为指向其他对象。
however the Circle value itself inside the address can change
是的,如果您的 const 指针指向一个对象,您可以就地改变该对象
So my attempt is to change the Circle value inside innerCircle
但这假定 innerCircle
指向一个对象。您将其初始化为 nullptr
,这意味着它 不指向任何对象 。这就是 nullptr
(或旧的 NULL
) 的意思。
因为你的指针没有指向一个对象,所以那里没有任何东西你可以合法地改变。由于您声明了指针 const
,因此您也无法将其更改为指向真实对象。
之后,正如borgleader所说,你得到了循环问题的递归定义。
也许 Circle
应该有一个指向圆的(可能是 nullptr)指针,如果需要,它可以变异为指向 Circle
?例如
struct Circle
{
Circle() : innerCircle(nullptr) {}
Circle* innerCircle;
void insert(Circle *inner)
{
innerCircle = inner;
}
bool hasInner() const { return (innerCircle != nullptr); }
Circle* getInner() const) { return innerCircle; }
};