2

我尝试交换 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 中存在错误。”

知道如何交换动态分配的数组吗?谢谢

4

2 回答 2

4

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

改为使用std::vector

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

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

或者

std::swap(arr1, arr2);

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

观察int您最初拥有的缺失声明。

于 2013-01-21T20:12:15.413 回答
2

您的第一种方法应该可以简单地删除int第二行和第三行之前的内容(不要标记新的整数变量,分配给数组)。同样正如 hmjd 所指出的,您可以使用std:swap.

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

于 2013-01-21T20:12:35.857 回答