gpt4 book ai didi

c++ - 仅在一定限制之前释放二维指针数组的内存

转载 作者:行者123 更新时间:2023-11-27 22:38:26 24 4
gpt4 key购买 nike

我有一个使用指针动态创建的二维数组。我只想删除某些连续的行,而不是全部。这是我为删除而编写的代码:

#include <iostream>
using namespace std;

void clearMemoryAll(int **matchedIndicesArray, int rows)
{

for(int i = 0; i < rows; i++)
{
delete [] matchedIndicesArray[i];
}

delete [] matchedIndicesArray;

}

int main()
{
// Program having 10M x 4 = 40M elements

int rows = 10000000;
int **matchedStagesMatrix;
matchedStagesMatrix = new int*[rows];

int cols = 4;


for(int i = 0; i < rows; i++)
{
matchedStagesMatrix[i] = new int[cols];
for (int j = 0; j < cols; j++)
{
matchedStagesMatrix[i][j] = 1;
}
}



clearMemoryAll(matchedStagesMatrix, rows);
while (1) {}


return 0;
}

显然,这段代码将删除二维数组的所有行。如何只删除某些前 100 行而不是一次全部删除?我不能简单地将 100 作为参数传递给函数,因为当控件到达函数的 for 循环之外时,它无论如何都会尝试删除完整的矩阵。应删除矩阵,以便在删除某些行后它仍然可用。我知道 vector 是一个很好的选择,但我很好奇指针的工作原理以及如何操纵它们而不是使用 vector 。

编辑:此外,我计划多次使用此删除功能,即我将多次删除矩阵行,每次只删除某些行,直到所有行都删除删除。因此,for循环外的最后一行不能每次都执行。

最佳答案

如果您使用 vector ,就可以做到这一点,由于它们的方法, vector 更容易处理。

int n,x;
std::cin>>n>>x;
std::vector<int*> myVec;
int* row=new int[n];
for(int i=0;i<n;i++)
std::cin>>row[i];
myVec.push_back(row);
//do this for all your rows;
myVec.erase(myVec.begin(),myVec.end()+x); //delete first x rows;
//you can play with the line above to delete lines in a range or sth

关于c++ - 仅在一定限制之前释放二维指针数组的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51262844/

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