如何从中间数组中正确释放内存?例如,让我们有以下方法:
void Calc(int** & A)
{
int * B = new int[_countI * _countJ];
/*какие-то вычисления с участием массива B*/
/*перевод одномерного массива B в двумерный массив A*/
int k = 0;
for (int i = 0; i < _countI; i++)
{
for (int j = 0; j < _countJ; j++)
{
A[i][j] = B[k];
k++;
}
}
}
如何在此方法中进一步从数组 B 中释放内存?如果我写delete[] B;
,那么数组 A 会发生什么?
没错 - 使用 delete[] 运算符删除数组 B (如您所愿)。数组 B 将被删除,但 A 不会。存储在其中的数据将保留。
在二维和一维数组之间来回驱动数据通常没有意义。使用将一对“行、列”转换为线性索引的功能效率更高,反之亦然。
例如,当前通过索引使用一维数组完成的所有计算都可以使用二维数组
k
执行,方法是用一对 , 替换一个i = k / длина_строки
索引j = k % длина_строки
。