forループで何が間違っているか教えてください。私はそれを実行すると、それは中断します。C++で2次元配列を削除する
#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;
を======= OK:私はループのために、それだけで停止したことに気づいた、間違っているものを見るためにデバッグしてみました。ここ=======
を解決しようとする課題は、その理由です:
私はちょうどMAX_POPULATION+1
にMAX_POPULATION
を変更し、それが働きました。
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''の作成方法を投稿してください。 –
@ Heeimimingを行った。 –
内部配列の配列はすべて初期化されていますか?削除する前にそれらがヌルでないことを確認してください。 –