C++怪事:一个类只能new一次,第二次就报 Bad permissions for mapped region at address(百度、qq几天无果)

leinchu 2019-08-23 02:42:41
我会c,完全不会c++,下载别人c++代码学习。

原本那个类代码是这样的:

CMailBox::CMailBox(uint16_t uid, EFDTYPE fdtype, const char* pszAddr, uint16_t unPort)
: m_bConnected(false), m_fd(0), m_fdType(fdtype), m_connectdTime(0),
m_serverName(pszAddr), m_serverPort(unPort), m_unRecvBuffLen(0), m_id(uid),
m_unServerMbType(SERVER_NONE), m_uAuthz(MAILBOX_CLIENT_UNAUTHZ), m_nSendPos(0), m_bDeleteFlag(false)
{
//m_connectdTime = time(NULL);
m_lastTickTime = m_connectdTime;

if(fdtype == FD_TYPE_MAILBOX)
{
m_timeout = OTHERSERVER_TIMEOUT;
}
else
{
m_timeout = CLIENT_TIMEOUT;
}
}

我这样调用:

CMailBox* mb0 = new CMailBox(7, FD_TYPE_MAILBOX, "127.0.0.1", 8002);
CMailBox* mb1 = new CMailBox(7, FD_TYPE_MAILBOX, "127.0.0.1", 8003);


就在CMailBox* mb1 这个报错,但第一个mb0没有报错:

==5344==
==5344== Process terminating with default action of signal 11 (SIGSEGV)
==5344== Bad permissions for mapped region at address 0x5000001
==5344== at 0x4A54E7: CMailBox::CMailBox(unsigned short, mogo::EFDTYPE, char const*, unsigned short) (mailbox.cpp:27)


把构造函数直接改简单为:


CMailBox::CMailBox()
{
cout << "Constructor called" << endl;
//this->initValues(1, FD_TYPE_SERVER, "127.0.0.1", 8001);
cout << "Constructor ended" << endl;
}


调用为:

CMailBox* mb0 = new CMailBox();
CMailBox* mb1 = new CMailBox();


同样是就在CMailBox* mb1 这个报错,但第一个mb0没有报错,错误内容不一样了:

==64250==
==64250== Process terminating with default action of signal 11 (SIGSEGV)
==64250== Bad permissions for mapped region at address 0x5000011
==64250== at 0x3F7DC9C08B: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string() (in /usr/lib64/libstdc++.so.6.0.13)
==64250== by 0x4A550A: CMailBox::CMailBox() (mailbox.cpp:32)



百度了很多,加了好几个qq群,大家也给了各种方法,就是解决不了。。。
哭了,求帮助!
...全文
221 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
leinchu 2019-09-04
  • 打赏
  • 举报
回复

void * CMailBox::operator new(size_t size)
{
    m_lock.Lock();

    if (NULL == memPool)
    {
        expandMemoryPool();
    }

    MemoryPool *head = memPool;
    memPool = head->next;

    m_lock.Unlock();

    //LogDebug("CMailBox new", "");

    return memPool;//这里不对,应该返回 return head;
}
NorZ 2019-08-23
  • 打赏
  • 举报
回复
类的定义发来看看?
飞雪蝶映 2019-08-23
  • 打赏
  • 举报
回复
应该是继承类有什么限制,或者是有些必要参数不能用一样,可能关联到内核中比较唯一的东西。
luoyely 2019-08-23
  • 打赏
  • 举报
回复
引用 1 楼 luoyely 的回复:
https://www.baidu.com/link?url=k5ju6gfrkJtesvdTu8T2qtxzF5a0lHG4BQkVsZoGl2kDlZmffrtVLAxcbFHkkIbRBfC2IdOlOkTldG1jz2K0UGG2dtbmIRkxMMY_JGI7oanCe2eLJZVOSG5MOVkKukOIYEdilPF__9ZWJeULxeApka&wd=&eqid=be40d5e20031ee08000000035d5f9260

这个也是百度到的,你可以把源码发一下看看
luoyely 2019-08-23
  • 打赏
  • 举报
回复
https://www.baidu.com/link?url=k5ju6gfrkJtesvdTu8T2qtxzF5a0lHG4BQkVsZoGl2kDlZmffrtVLAxcbFHkkIbRBfC2IdOlOkTldG1jz2K0UGG2dtbmIRkxMMY_JGI7oanCe2eLJZVOSG5MOVkKukOIYEdilPF__9ZWJeULxeApka&wd=&eqid=be40d5e20031ee08000000035d5f9260

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧