c++ - 当调用函数修改指针时如何释放内存?

标签 c++ pointers memory free

我需要编写一个以数组作为输入的函数,并且需要在每次函数调用时移动数组的头部,为了简单地说明我的问题,我设计了以下简单示例:

void testFunc(FLOAT* &testVec)
{
   std::cout << " testVec " << *testVec << "\n";
   ++testVec;

}

main() 我有:

FLOAT** testVec;
testVec = new FLOAT*[2];

for (int i = 0; i < 2; ++i)
testVec[i] = new FLOAT[3];

testVec[0][0] = 1.0;  testVec[0][1] = 2.0;  testVec[0][2] = 3.0;
testVec[1][0] = 4.0;  testVec[1][1] = 5.0;  testVec[1][2] = 6.0;

for (int j = 0; j < 3; ++j){

  for (int i = 0; i < 2; ++i){
     testFunc(testVec[i]);

  }

}

这段代码运行良好,如我所料打印了从 1.0 到 6.0 的值,但是,我不知道如何在此之后删除 testVec,因为函数正在更改 testVec [我]。在这种情况下有什么方法可以释放内存吗?

最佳答案

你的问题的答案是,你需要保存 new 结果的拷贝,然后删除它:

FLOAT** testVec = new FLOAT*[2];
FLOAT** savedVec = testVec;
....
for (size_t i = 0; i < 2; ++i)
    delete [] savedVec[i];
delete [] savedVec;

但是,这让您的生活变得非常、非常、艰难。在 C++ 中,您几乎总是希望使用 std::vectorstd::array 而不是 new 和 delete。你可能会使用:

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

testFUNC 的声明和实现也需要更改。


最后的评论:你也需要在每次从 0 到 3 的循环中重置 testVec。否则,第二次循环时它指向数组的末尾。

关于c++ - 当调用函数修改指针时如何释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34446925/

相关文章:

c - 当我们在 C 中取消引用 NULL 指针时,OS 中会发生什么?

c++ - 指向类的双指针

c++ - 类数组 'undefined' C++

C++ std::tr1::hash::operator() 未定义?

c - 数组名代表什么?

未使用偏移量的 PHP 数组内存消耗

c++ - 如何在 C++ 中急切提交分配的内存?

C++ std::bad_alloc 错误

c++ - MFC中2.1以上如何使用richedit控件_RICHEDIT_VER

c++ - 在另一个 vector 的末尾添加一个 vector