【发布时间】:2015-05-05 23:07:55
【问题描述】:
此代码是否存在潜在的内存泄漏问题?
#include <iostream>
#include <vector>
using namespace std;
vector<int> foo()
{
vector<int> vec2;
vec2.push_back(0);
return vec2;
}
int main()
{
vector<int> vec1;
while(true)
{
vec1 = foo();
}
return 0;
}
如果我使用返回数字的函数,例如int,则没有问题,因为我们从内存堆栈中复制值。但是如果我使用pointer(而且我认为编译器不会复制数组、向量和其他大型数据结构——它隐式地使用指针),情况就会改变。
在foo 中,我为向量分配内存并创建指向它的指针vec2。然后,我创建第二个指向该内存扇区vec1 的指针并立即删除指针vec2,因为函数foo 已结束。
在while 的第二次迭代中,我在foo 中分配了一个新的内存扇区,并将指针vec1 更改为该区域。
那么,第一个分配扇区发生了什么?我没有在任何步骤上让它免费。但是当我查看进程使用的内存时,我没有看到任何泄漏。
【问题讨论】:
-
“如果我知道,编译器不会复制数组、向量和其他大型数据结构——它隐式地使用指针”——好吧,你错了。也许您已经阅读了有关 Java 的内容并将其与 C++ 混为一谈。
-
foo是向量还是函数?这不会使用 g++ 编译器编译为 c++ 代码 -
@masfo001 声明
foo后缺少一组括号 -
我在您的代码中看不到任何内存泄漏。我使用 valgrind 进行了测试。只需编辑
while循环,使其不是无限的。
标签: c++ pointers memory-leaks