我尝试交换具有不同容量的2个动态分配数组。我尝试使用:
int *temp = arr1;
int arr1 = arr2;
int arr2 = temp;
然而,这种方法不起作用。所以我尝试了不同的方法:
ItemType *temparr1 = new ItemType[other.capacity];
std::copy(setMember, setMember+capacity, temparr1);
ItemType *temparr2 = new ItemType[this->capacity];
std::copy(setMember, setMember+capacity, temparr2);
delete [] this->setMember;
delete [] other.setMember;
other.setMember = temparr1;
this->setMember = temparr2;
不幸的是,这种方法会抛出一条错误消息:“Windows在Hw1.exe中触发了断点。
这可能是由于堆的损坏,这表示Hw1.exe或它已加载的任何DLL中存在错误。“
任何想法如何交换动态分配的数组? THX
答案 0 :(得分:4)
您无法交换内存,因为它的大小不同(假设other.capacity
与this->capacity
不同 - 如果是,则不会出现运行时错误。)
改为使用std::vector
。
如果你只想交换指针指向的内容:
int *temp = arr1;
arr1 = arr2;
arr2 = temp;
或
std::swap(arr1, arr2);
再次注意,这些不会交换实际内存,而是交换指针的值。
观察您最初所缺少的int
声明。
答案 1 :(得分:2)
你的第一种方法应该只是在第二行和第三行之前删除int
(不要对新的整数变量进行十进制,分配给数组)。另外,正如hmjd所指出,您可以使用std:swap
。
如果要使用std :: copy显示的第二种方法,则必须首先调整阵列的大小,因为它的容量可能不足。