最近、会社が新しいサーバーに移行したため、このプログラムが正しく機能しなくなりました。コンパイルは問題ありませんが、実行するとエラーが発生し、キューの初期化中にクラッシュします。valgrind を使用すると、キュー ライブラリにメモリ リークが見られます。コードはかなり大きくなりますが、すべてをここに入れるのは難しいので、妥当と思われる範囲でカットしました。バージョンなどに関して、私が見ることができない問題があるかもしれないと思います。誰かヒント/ヘルプを提案できますか?
typedef unsigned char byte;
typedef unsigned char boolean;
typedef unsigned int uint32;
typedef unsigned short uint16;
typedef unsigned char uint8;
typedef signed long int int32; /* Signed 32 bit value */
typedef signed short int16; /* Signed 16 bit value */
typedef signed char int8; /* Signed 8 bit value */
次の部分で混乱しないように、いくつかの型定義のみ
struct MIPMsg
{
byte msg[1024];
uint32 msglen;
uint32 ipaddr;
ushort sin_port;
uint32 MNHomeAddr;
struct timeval ts;
MIPMsg() : msglen(0), ipaddr(0), sin_port(0) , MNHomeAddr(0)
{
memset( msg, '\0', sizeof(msg) );
}
};
class MIPMsgQueue {
public:
MIPMsgQueue();
~MIPMsgQueue();
private:
queue<MIPMsg*> mQueue_;
};
それが h cut h ファイルで、これが cut cpp ファイルです。
MIPMsgQueue() :: MIPMsgQueue() : mQueue_()
{
}
これが valgrind スニペットです。
==25753== at 0x4A0666E: operator new(unsigned long) (vg_replace_malloc.c:220)
==25753== by 0x4045C6: __gnu_cxx::new_allocator<MIPMsg**>::allocate(unsigned long, void const*) (new_allocator.h:88)
==25753== by 0x4045F9: std::_Deque_base<MIPMsg*, std::allocator<MIPMsg*> >::_M_allocate_map(unsigned long) (stl_deque.h:424)
==25753== by 0x404B23: std::_Deque_base<MIPMsg*, std::allocator<MIPMsg*> >::_M_initialize_map(unsigned long) (stl_deque.h:471)
==25753== by 0x404C70: std::_Deque_base<MIPMsg*, std::allocator<MIPMsg*> >::_Deque_base(std::allocator<MIPMsg*> const&, unsigned long) (stl_deque.h:368)
==25753== by 0x404D0D: std::deque<MIPMsg*, std::allocator<MIPMsg*> >::deque(std::deque<MIPMsg*, std::allocator<MIPMsg*> > const&) (stl_deque.h:690)
==25753== by 0x404E20: std::queue<MIPMsg*, std::deque<MIPMsg*, std::allocator<MIPMsg*> > >::queue(std::deque<MIPMsg*, std::allocator<MIPMsg*> > const&) (stl_queue.h:146)
==25753== by 0x4033E2: MIPMsgQueue::MIPMsgQueue() (MIPMsgQueue.cpp:5)
また、ここにgdbエラーコードがあります
munmap_chunk(): invalid pointer: 0x0000000000621770 ***
読んでくれてありがとう。