交换动态分配的数组错误

时间:2013-01-21 20:09:19

标签: c++ visual-c++

我尝试交换具有不同容量的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

2 个答案:

答案 0 :(得分:4)

您无法交换内存,因为它的大小不同(假设other.capacitythis->capacity不同 - 如果是,则不会出现运行时错误。)

改为使用std::vector

如果你只想交换指针指向的内容:

int *temp = arr1;
arr1 = arr2;
arr2 = temp;

std::swap(arr1, arr2);

再次注意,这些不会交换实际内存,而是交换指针的值。

观察您最初所缺少的int声明。

答案 1 :(得分:2)

你的第一种方法应该只是在第二行和第三行之前删除int(不要对新的整数变量进行十进制,分配给数组)。另外,正如hmjd所指出,您可以使用std:swap

如果要使用std :: copy显示的第二种方法,则必须首先调整阵列的大小,因为它的容量可能不足。