マージソートを使用して配列をソートする関数を作成しています。これまでのところ、私は2つの機能を持っています:
template <typename Item, typename SizeType>
void merge_sort(Item data[], SizeType size) {
SizeType size1, size2;
if(size > 1) {
size1 = size/2;
size2 = size - size1;
merge_sort(data,size1);
merge_sort((data+size1),size2);
merge(data,size1,size2);
}
}
と:
template <typename Item, typename SizeType>
void merge(Item data[], SizeType size1, SizeType size2) {
Item* temp;
SizeType copied = 0;
SizeType copied1 = 0;
SizeType copied2 = 0;
temp = new Item[size1 + size2];
while(copied1 < size1 && copied2 < size2) {
if(data[copied1] < (data + size1)[copied2])
temp[++copied] = data[++copied1];
else
temp[++copied] = (data + size1)[++copied2];
}
while (copied1 < size1)
temp[++copied] = data[++copied1];
while (copied2 < size2)
temp[++copied] = (data + size1)[++copied2];
for(SizeType i = 0; i < size1 + size2; ++i)
data[i] = temp[i];
delete [] temp;
}
しかし、プログラムを実行しようとすると、通常のブロックの後にヒープが破損し、ヒープ バッファーの終了後にアプリケーションがメモリに書き込んだことを CRT が検出したというデバッグ エラーが表示されます。これが何を意味し、どのように修正できるかを誰かが説明できますか?