Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.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++;读取访问冲突错误_C++ - Fatal编程技术网

C++ C++;读取访问冲突错误

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

我目前收到一个“0xC0000005:Access violation reading location 0xCCCC0.”错误,我已尝试诊断该问题…我认为当我定义的3规则开始发挥作用并将我指向此处时,问题出现了

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;