这段非递归的快速排序代码错哪了

这段非递归的快速排序代码哪里错了?
写了个非递归的快速排序,建了个栈,没用模板库的,但下面主函数里第二种情况运行时会出错,在VS2010上编译,
错误是:HEAP CORRUPTION DETECTED:after Normal block(#88) at 0x00244E70
单步了好几次都没有发现,请高手帮看,要怎么修改??

C/C++ code

//划分函数
template<class T>
int Partition(T* a,int left,int right)
{
    T pivot = *(a+right);
    while(left<right)
    {
        while(*(a+left)<pivot && left<right)
            left++;
        if(left<right)
            *(a+right--) = *(a+left);
        while(*(a+right)>pivot && left<right)
            right--;
        if(left<right)
            *(a+left++) = *(a+right);
    }
    *(a+left) = pivot;
    return left;
}

//快速排序(非递归)
template<class T>
void sort(T* arr,int len)
{
    if(len == 1)
        return;
    int left = 0;
    int right = len - 1;
    int *stack = new int[right-left+1];
    int top = 0;
    int mid;
    stack[top++] = left;
    stack[top++] = right;
    while(top>0)
    {
        right = stack[--top];
        left = stack[--top];
        if(left<right)
        {
            mid = Partition(arr,left,right);
            if(mid-left > right-mid)
            {
                stack[top++] = left;
                stack[top++] = mid-1;
                if (right > mid)
                {
                    stack[top++] = mid + 1;
                    stack[top++] = right;
                }
            }
            else
            {
                stack[top++] = mid + 1;
                stack[top++] = right;
                if(mid > left)
                {
                    stack[top++] = left;
                    stack[top++] = mid - 1;
                }
            }
        }
    }
    delete[] stack;
}

int _tmain(int argc, _TCHAR* argv[])
{
    //下面这个可以通过
    int arr[] = {4,3,2};
    sort(arr,3);
    //print arr...


    //这个不能通过
    int arr2[] = {2,2,2};
    sort(arr2,3);
    //....

    return 0;
}



------解决方案--------------------
楼主的stack开小了,在第二例里面,最多存放了4个吧,但是好像你只开辟了容量为3的数组,导致写入的位置错错了。所以delete的时候crash掉了