找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3862|回复: 2

使用ACE的Local_Mem_Pool时遇到问题,棘手。

[复制链接]
发表于 2011-1-20 09:59:43 | 显示全部楼层 |阅读模式
前期对内存池的使用,没发现过这种问题。可是这几天频繁出现crash现象。

使用的ace 5.8的版本,在win32平台的多线程下使用。

发现crash时,总是如下代码段:
while (1)

    // *Warning* Do not use "continue" within this while-loop.

    {
      ACE_SEH_TRY
        {
          if (currp->size_ >= nunits) // Big enough
            {
              ACE_MALLOC_STATS (++this->cb_ptr_->malloc_stats_.ninuse_);
             if (currp->size_ == nunits) //出现问题时,就是这句,显示currp为空指针
                // Exact size, just update the pointers.
                prevp->next_block_ = currp->next_block_;
              else
                {
                  // Remaining chunk is larger than requested block, so
                  // allocate at tail end.
                  ACE_MALLOC_STATS (++this->cb_ptr_->malloc_stats_.nblocks_);
                  currp->size_ -= nunits;

请教有经验的大侠,这会是什么原因导致的呢?
                  currp += currp->size_;
                  MALLOC_HEADER::init_ptr (&currp->next_block_,
                                           0,
                                           this->cb_ptr_);
                  currp->size_ = nunits;
                }
              this->cb_ptr_->freep_ = prevp;

              // Skip over the MALLOC_HEADER when returning pointer.
              return currp + 1;
            }
发表于 2011-1-28 17:45:03 | 显示全部楼层
封在ACE_Malloc里加个锁试试
发表于 2011-1-28 18:57:19 | 显示全部楼层
你把你的测试代码贴出来看看。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-5-15 19:17 , Processed in 0.014213 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表