gpt4 book ai didi

c++ - 在 C++ 中删除二维数组

转载 作者:搜寻专家 更新时间:2023-10-31 01:54:10 24 4
gpt4 key购买 nike

有人能告诉我 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

关于c++ - 在 C++ 中删除二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10071586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com