那位大哥看看这个程序,为什么在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实现
#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实现