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

标签 c++ multidimensional-array delete-operator

有人可以告诉我 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/

相关文章:

c++ - 如何从模板中的对象 vector 上获取迭代器?

c++ - 1000 以下所有数字的总和,是 3 或 5 的倍数

c++ - 用于 C++ 的 Visual Studio 2010 注释插件

python - 我该如何优化这段代码?以及一般如何优化 Python for 循环?

java - 二维数组中最有值(value)的图?

c++ - 有关复制分配和删除运算符的问题

c++ - 需要释放 QList 内容?

c++ - 相邻数组元素的地址之间的差异..?

java - 如何使用 Java 中的重载函数打印二维数组的内容

c++ - 删除多维矩阵时出错