0

最近、会社が新しいサーバーに移行したため、このプログラムが正しく機能しなくなりました。コンパイルは問題ありませんが、実行するとエラーが発生し、キューの初期化中にクラッシュします。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 ***

読んでくれてありがとう。

4

2 に答える 2