操作员问题 - 访问冲突
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;
}
提前感谢所有帮助!
您的问题似乎是对指针的推理,而不是特定于运算符的任何内容。
我有一个指向圆的常量指针。所以,我的指针无法更改地址
true - 无论您的 const 指针初始化为指向什么对象,它都不能更改为指向其他对象。
但是地址内的 Circle 值本身可以更改
是的,如果你的常量指针指向一个对象,你可以就地改变对象
所以我的尝试是更改内部圈内的圆值
但这假设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; }
};
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
看这里
康斯特之前还是之后的康斯特?
所以你有一个常量指针,它在构造函数本身中初始化为 null。所以你以后不能改变它。所以排队
c->innerCircle[0] = c2;
您正在获取并将始终获得 null。
相关文章:
- 写入位置0x0000000C时发生访问冲突
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 链表中写入访问冲突的未知原因
- C++中的openCV Mat访问冲突
- C++尝试深度复制唯一指针时出现内存访问冲突
- C++ 中动态二维数组的访问冲突
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- 0xC0000005:访问冲突读取位置 0x00000000. 重载 == 运算符的问题
- 如何解决此C++访问冲突问题
- 计数排序输出问题:读取访问冲突
- 操作员问题 - 访问冲突
- 调用基构造函数时遇到问题 - 获取读取访问冲突
- (SDL 渲染问题)C++ 引发异常:读取访问冲突.这是无效的
- 使用JNI从Java调用本机(C++)函数时发生访问冲突:这是我的代码问题,还是已知问题
- 将内联GASM移植到x64 MASM访问冲突问题
- 访问冲突写入位置0x00000000.内存集函数问题
- 初始值设定项列表中的QString导致访问冲突.这里出了什么问题
- 写入位置0x00000000时发生访问冲突.指针问题
- 从c#调用c++ DLL和访问冲突问题,我的选择是什么
- c++跟踪日志问题,fstream访问冲突问题