推送struct并从std :: queue弹出时出现内存泄漏

时间:2014-05-15 08:53:07

标签: c++ memory-management memory-leaks

我有一个结构,我将它从一个线程推送到std::queue而不是从另一个线程弹出。操作是线程安全的但是泄漏检测器有泄漏。

struct Data
{
  double  x,y;
  float   z;
  float  a,b,c;     
  int frame;
  double timestamp;
  Data& operator=(const SDTNavData& rhs);

};

Data& Data::operator=(const Data& rhs)
{
  if (this != &rhs)
   {
     x= rhs.lat;
     y= rhs.lon;
     z= rhs.alt;

     a= rhs.yaw;
     b = rhs.pitch;
     c  = rhs.roll;

     frame = rhs.frame;

    timestamp = rhs.timestamp;
}

return *this;
}

当我创建std::queue并从队列中推送和弹出数据时,它会给我泄漏报告

Data d;
std::queue<Data> my_queue;

my_queue.push(d);

D new=my_queue.front();

my_queue.pop();

1 个答案:

答案 0 :(得分:0)

进行有根据的猜测,因为您发布的代码有几个问题。我假设您遇到的问题是,在将内存分配到内存之前,您正在推送队列Data d

Data *d;
std::queue<Data*> my_queue;
my_queue.push(d);
d = new Data();   
my_queue.pop();

以上是错误的,因为在队列中您推送d而不是d的副本。相反,以下是正确的:

Data *d;
d = new Data();
std::queue<Data*> my_queue;
my_queue.push(d);
...
my_queue.pop();

现在,队列中推送的d副本指向已分配的内存。