std::队列错误?Pop调用了错误的destroy函数
std::queue bug? pop calls to wrong destroy function
我正在使用c++队列。首先,我执行push操作(调用复制构造函数并正常工作),当执行简单的pop操作时,它调用第一个析构函数方法(而不是新创建的方法)。下面是一个示例代码:
{
T_MENSAJE new_msg; // Constructor 1 called -> Instance 1
new_msg.rellena(msg);
m_messages.push(new_msg); // Copy constructor called -> Instance 2
m_messages.pop(); // Destructor of instance 1 called !!!!!!!
return; // again, destructor of instance 1 called
}
编辑:
为了演示它,我将m_data的内存方向显示为rellena(msg);构造函数复制方法和在销毁器中。在rellena中,有memDir1,在复制构造函数memDir2中,如我所料。但是当我调用pop方法时,销毁方法显示memDir1(而不是我期望的memDir2),然后当函数结束时,再次调用销毁方法并再次显示memDir1。下面是T_MENSAJE结构体:
typedef struct T_MENSAJE
{
T_MSG_HEADER m_cab;
char m_command[MSG_COMMAND_SIZE];
char* m_data;
T_MENSAJE():m_data(0){
}
~T_MENSAJE()
{
static int counter = 0;
if (m_data != 0)
{
printf("%s -- direction = %dn",__FUNCTION__,m_data);
delete[](m_data);
}
}
T_MENSAJE(const T_MENSAJE& m)
{
m_cab = m.m_cab;
memcpy(&m_command,&m.m_command,MSG_COMMAND_SIZE);
if (m.m_data != 0)
{
int numBytes = m_cab.m_lenght-MSG_HEADER_SIZE-MSG_COMMAND_SIZE;
m_data = new char[numBytes];
printf("%s -- direction = %dn",__FUNCTION__,m_data);
memcpy((char*)&(m_data),&m.m_data, numBytes);
}else
{
m_data = 0;
}
}
......
......
......
}
memcpy memcpy((char*)&(m_data),&m.m_data, numBytes);
将numBytes
从&m.m_data
的地址复制到成员m_data的地址。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- std::队列错误?Pop调用了错误的destroy函数