有人可以告訴我什麼是for循環?當我運行它時,它會中斷。我試圖調試,看看有什麼是錯的,我注意到,在for循環,它只是停止:在C++中刪除2d數組
#define MAX_POPULATION 64
float **tr_pop;//Tournament candidates
float **matingPool;//Mating pool
tr_pop=new float *[m];
matingPool=new float *[m];
for(l=0;l<m+1;l++)//allocating
{
tr_pop[l]=new float[MAX_POPULATION];
matingPool[l]=new float[MAX_POPULATION];
}
for (int r = 0; r < row; ++r)//deleting
{
delete [] matingPool[r];//Stops here (not ending program just frozen)
delete [] tr_pop[r];
}
delete [] tr_pop;
delete [] matingPool;
=======確定。問題解決了=======
這裏的原因是:
我只是改變了MAX_POPULATION
到MAX_POPULATION+1
和它的工作。
for(l=0;l<m+1;l++)
{
tr_pop[l]=new float[MAX_POPULATION+1];
matingPool[l]=new float[MAX_POPULATION+1];
}
因爲在其他功能我覺得我是在做違反:
void crossover()
{
int p1,p2,i,j;float tempBit;
p1=m/3;
p2=(2*m)/3;
for(j=0;j<MAX_POPULATION;j++)
{
for(i=p1;i<p2;i++)
{
tempBit=matingPool[i][j];
matingPool[i][j]=matingPool[i][j+1];//THE VIOLATION POINT (I THINK)
matingPool[i][j+1]=tempBit;
}
j++;
}
正如你可以看到,當j = MAX_POPULATION
在循環結束時,我試圖達到MAX_POPULATION + 1
。所以我改變了撥款列,問題解決:)
請發佈''matingPool''和''tr_pop''是如何創建的。 – 2012-04-09 09:55:43
@HeShiming完成。 – 2012-04-09 10:01:15
內部數組中的所有數組是否都已初始化?在刪除之前檢查它們是否爲空。 – 2012-04-09 10:01:17