#ifndef _MERGE_H
#define _MERGE_H
#include <algorithm>
#include <iterator>
using namespace std;
/*升序版合并*/
template<typename Iterator>
void merge(Iterator p, Iterator q, Iterator r)
{
typedef typename iterator_traits<Iterator>::value_type T;
long i, j, n1, n2;
n1 = distance(p, q);
n2 = distance(q, r);
T *L = new T(n1), *R = new T(n2);//分配左右临时数组L和R的空间
copy(p, q, L);
copy(q, r, R);//调试中发现是copy这句发生了内存越界或者其他错误
Iterator k = p;
i = j = 0;
while (i<n1&&j<n2)
{
if (L[i] < R[j])
*(k++) = L[i++];
else
*(k++) = R[j++];
}
if (i < n1)
copy(L + i, L + n1, k);
if (j < n2)
copy(R + j, R + n2, k);
delete[]L;//调试到delete出错
delete[]R;
}
#endif /*_MERGE_H*/在这里书写代码片
程序运行到delete,出发断点,出发未知错误,其转到:
extern "C" _CRTIMP int __cdecl _CrtIsValidHeapPointer(
const void * pUserData
)
{
if (!pUserData)
return FALSE;
if (!_CrtIsValidPointer(pHdr(pUserData), sizeof(_CrtMemBlockHeader), FALSE))
return FALSE;
return HeapValidate( _crtheap, 0, pHdr(pUserData) );
}在这里书写代码片
这个问题如何解决呢,还有在模版函数内部如何开辟内存空间及释放空间。