C++ C++;读取访问冲突错误
我目前收到一个“0xC0000005:Access violation reading location 0xCCCC0.”错误,我已尝试诊断该问题…我认为当我定义的3规则开始发挥作用并将我指向此处时,问题出现了C++ C++;读取访问冲突错误,c++,C++,我目前收到一个“0xC0000005:Access violation reading location 0xCCCC0.”错误,我已尝试诊断该问题…我认为当我定义的3规则开始发挥作用并将我指向此处时,问题出现了 size_type size() const { // return length of sequence return (this->_Mysize); <---------------------this line } size\u typ
size_type size() const
{ // return length of sequence
return (this->_Mysize); <---------------------this line
}
size\u type size()常量
{//序列的返回长度
返回(this->_Mysize);断点/观察列表。我猜这是空的。未初始化时,如果使用msvc编译,堆栈变量将填充0xCC字节。因此0xCC0可能是“this”的结果作为堆栈上未初始化的指针变量,加上对象结构中的“MySize offset”。代码中有许多明显的问题:析构函数,
例如,delete[]\u data
和delete[]myArray
,但是
\u数据
从不在默认构造函数中初始化,并且myArray
从未在复制构造函数中初始化。并且您正在执行赋值
操作员可以使对象处于无效状态,例如new
失败。(通常,如果你必须测试自我分配,它是
几乎可以肯定您的赋值运算符已损坏。)以下任一项
这些问题导致未定义的行为,这可能会破坏自由市场
太空竞技场,引发了谁知道以后会发生什么问题
不过,看看size
的调用位置还是很有趣的
错误消息表明此
无效,您调用了
具有无效地址的函数。我猜这是指针问题,但如果没有堆栈跟踪/回溯,就无法判断。在某个地方,您在一个地址调用size(),您认为有ArrayStorage,但没有。因为它是0xCCCE0,所以我会使用一个统一的指针 例如,你有这样的东西吗
ArrayStorage storage1;
ArrayStorage* storage2;
*storage2 = storage1;
这将导致此错误或类似错误,该指针无效
为什么您要编写自己的std::vector?回溯在这里会很有帮助您是否检查了
此
是否有效?您是否有来自调试器的回溯(您在调试器中检查了应用程序?)以及您为什么要尝试实现自己的“数组”我想这是一个指针问题,但如果没有堆栈跟踪/回溯,就无法判断。在某个地方,您正在调用size()在一个你认为有ArrayStorage但没有的地址。因为它是0xCCCE0,我会使用一个统一的指针。操作系统?编译器名称和版本?:为什么不在抛出错误之前使用断点和监视列表来查看值?这是“this->\u Mysize”很可能是空的。这是一个很好的提示。他可能定义了一个ArrayStorage*
,而没有用new
初始化它吗?最有可能的是。如果编译器正在优化代码并使用方法内联,则size()转换为直接字段访问,绕过vtable并导致此访问冲突。什么vtable?我没有看到任何东西使我相信size
是一个虚拟函数。您的第二个示例无法编译;没有初始值设定项,您无法定义引用。
ArrayStorage storage1;
ArrayStorage* storage2;
*storage2 = storage1;