删除C++中的二维数组

Deleting 2d array in C++

本文关键字:二维数组 C++ 删除      更新时间:2023-10-16

有人能告诉我for循环中出了什么问题吗?当我运行它时,它会中断。我试图调试以查看出了什么问题,我注意到在 for 循环中它只是停止:

#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。所以我改变了列的分配,问题解决了:)

您遇到了未定义的行为:

for(l=0;l<m+1;l++)//allocating
{
    tr_pop[l]=new float[MAX_POPULATION];
}

应该是

for(l=0;l<m;l++)//allocating
{
    tr_pop[l]=new float[MAX_POPULATION];
}

您正在为每个数组分配m元素并尝试访问m+1

您正在分配m float*但是在循环for您在分配内存时从0..m迭代,它应该从0..m-1 .为此,您需要将for循环更改为:for(l=0;l<m;l++)