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、2行目と3行目の前を削除するだけで機能するはずです(新しい整数変数をデカールせず、配列に割り当てます)。また、hmjdが指摘しているように、を使用することもできますstd:swap

std :: copyを使用して示す2番目のアプローチを使用する場合は、容量が不十分である可能性があるため、最初に配列のサイズを変更する必要があります。

于 2013-01-21T20:12:35.857 に答える