Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调用函数修改指针时,如何释放内存?_C++_Pointers_Memory_Free - Fatal编程技术网

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