那位大哥看看这个程序,为什么在delete []b的时候会出错?而删除这一行就没有有关问题

那位大哥看看这个程序,为什么在delete []b的时候会出错???而删除这一行就没有问题
#include <iostream>
using   namespace   std;
void   main()
{
int   i,k,m,j,jr,jl,jj;
bool   flag(0);
while   (cin> > k   &&   k <14)  
{
if   (k   ==   0)
break;
int   *a   =   new   int[2*k];

int   *b   =   new   int[k*2];
m   =   k+1;
for(i=0;i <2*k;i++)
a[i]   =   i+1;
while   (!flag)
{
for(i=2*k;i> 1;i--)
{
j   =   m%i;
if   (j   ==   0)
{
j   =   i;
}


for(jr=0;jr <(i-1)   &&   j <i;   jr++,j++)
{
b[jr]   =   a[j];
}
if   (j   ==   i)
{
for(jl=jr,j=0;jl <i   &&   j <(i-1);jl++,j++)
{
b[jl]   =   a[j];
}
}
else
{
for(jl=jr,j=0;jl <i   &&   j <(m%i-1);jl++,j++)
{
b[jl]   =   a[j];
}
}
b[jl]   =   a[j];  

for(jj=0;jj <i;jj++)
{
a[jj]   =   b[jj];
b[jj]   =   0;
}

if   (a[i-1] <(k+1)   &&   i> k)
{
m++;
for(i=0;i <2*k;i++)
a[i]   =   i+1;
break;
}


if   (i   ==   k+1)
{
flag   =   1;
break;
}

}
}
cout < <m < <endl;
flag   =   0;
delete   []   a;
delete   []   b;
}
}

------解决方案--------------------
应该是越界了,好好检查一下数组索引是不是在正确的范围之内。
------解决方案--------------------
用STL实现