C++ 调用函数修改指针时,如何释放内存?
我需要编写一个以数组作为输入的函数,并且需要在每次函数调用时移动数组头,为了简单地说明我的问题,我设计了以下简单示例:C++ 调用函数修改指针时,如何释放内存?,c++,pointers,memory,free,C++,Pointers,Memory,Free,我需要编写一个以数组作为输入的函数,并且需要在每次函数调用时移动数组头,为了简单地说明我的问题,我设计了以下简单示例: void testFunc(FLOAT* &testVec) { std::cout << " testVec " << *testVec << "\n"; ++testVec; } 这段代码运行良好,并按照我的预期打印了从1.0到6.0的值,但是,我不知道在此之后如何删除testVec,因为函数正在更改testVec
void testFunc(FLOAT* &testVec)
{
std::cout << " testVec " << *testVec << "\n";
++testVec;
}
这段代码运行良好,并按照我的预期打印了从1.0到6.0的值,但是,我不知道在此之后如何删除
testVec
,因为函数正在更改testVec[I]
。在这种情况下,有没有办法释放内存?您的问题的答案是,您需要保存一份new
的结果副本,并删除以下内容:
FLOAT** testVec = new FLOAT*[2];
FLOAT** savedVec = testVec;
....
for (size_t i = 0; i < 2; ++i)
delete [] savedVec[i];
delete [] savedVec;
或
std::vector testVec(2);//二元向量
//向量的数目:
用于(自动和元素:testVec)元素。调整大小(3);//调整每个元素的大小
然后,您的testFUNC
的声明和实现也需要更改
最后一点意见:您还需要在for循环从0到3的每一轮中重置
testVec
。否则,第二次循环时,它将指向数组的末端。您所问问题的答案是,您需要保存一份new
的结果副本,并删除以下内容:
FLOAT** testVec = new FLOAT*[2];
FLOAT** savedVec = testVec;
....
for (size_t i = 0; i < 2; ++i)
delete [] savedVec[i];
delete [] savedVec;
或
std::vector testVec(2);//二元向量
//向量的数目:
用于(自动和元素:testVec)元素。调整大小(3);//调整每个元素的大小
然后,您的testFUNC
的声明和实现也需要更改
最后一点意见:您还需要在for循环从0到3的每一轮中重置
testVec
。否则,第二次绕过循环时,它将指向阵列的末端
std::vector<std::array<FLOAT,3>> testVec(2); // A two element vector of
// three element arrays.
std::vector<std::vector<FLOAT>> testVec(2); // A two element vector
// of vectors:
for (auto &element : testVec) element.resize(3); // Resize each element