Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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++;尝试删除已更新的阵列时访问冲突读取位置0xDDCD_C++_Visual Studio_Debugging - Fatal编程技术网

C++ C++;尝试删除已更新的阵列时访问冲突读取位置0xDDCD

C++ C++;尝试删除已更新的阵列时访问冲突读取位置0xDDCD,c++,visual-studio,debugging,C++,Visual Studio,Debugging,我正在做家庭作业。我正在尝试为我正在创建的数组类重载“=”操作符,以便它使用与另一个数组相同的值分配新创建的数组。这似乎奏效了。创建阵列并复制数据。我还检查了数组第一个元素的位置,它与原始元素不同,因此我认为它不会试图删除已经删除的数组 我试过摆弄我的析构函数,但我真的不知道这是从哪里来的。如果有人有任何可能有用的调试策略,我也很乐意听到 Driver.cpp int main() { //初始化 int size=0; 字符填充='\0'; //获取有关阵列的信息 标准:cout大小; st

我正在做家庭作业。我正在尝试为我正在创建的数组类重载“=”操作符,以便它使用与另一个数组相同的值分配新创建的数组。这似乎奏效了。创建阵列并复制数据。我还检查了数组第一个元素的位置,它与原始元素不同,因此我认为它不会试图删除已经删除的数组

我试过摆弄我的析构函数,但我真的不知道这是从哪里来的。如果有人有任何可能有用的调试策略,我也很乐意听到

Driver.cpp


int main()
{
//初始化
int size=0;
字符填充='\0';
//获取有关阵列的信息
标准:cout大小;
std::cout-fill;
//创建阵列并打印阵列详细信息
数组*arr=新数组(大小、填充);

std::cout当您执行
arr2=arr;
时,您将
arr
持有的指针(内存地址)复制到
arr2

Array* arr2 = new Array();
arr2 = arr;
因此,在该调用之后,
arr2
arr
都持有相同的指针(指向相同的对象)。从那时起,
delete arr2;
将删除您在执行
delete arr;
之前两行时已删除的相同对象:

delete arr;
arr = nullptr;
delete arr2;

因此,在此处执行
delete arr2;
会导致已经未定义的行为。在这一点上,任何事情都可能发生。

数组的复制构造函数在哪里?
换句话说,
数组(const Array&)
?你需要它,否则你就不能完全正确地实现3的规则。另外,你为什么在
main
中这样做:
Array*arr=new Array(size,fill);
而不是
Array arr(size,fill)
?您对代码应该如何工作的想法似乎还没有完全理解。此外,此注释并没有说明真相:
//复制构造函数测试
——该代码中没有使用复制构造函数。此外,您还没有包括可能缺少某些片段的Array*arr2=new Array();arr2=arr;对@JeremyFriesner提到的内容是肯定的。如果你没有使用指针,正如我在第二条评论中提到的,实现了复制构造函数,那么你会取得一些进展。现在你完全搞乱了
main
,错误的指针用法,你有一个不完整的
Array
类,希望它能正常工作直截了当地。
delete[] this->data_;

on the second array.

> Exception thrown at 0x5D13DB1B (ucrtbased.dll) in driver.exe: 0xC0000005: Access violation reading location 0xDDDDDDCD

Thanks for any help!
Array* arr2 = new Array();
arr2 = arr;
delete arr;
arr = nullptr;
delete arr2;